Reasoning Details

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

Proof completed.
 < Prove_Constraint matchEval:host:proj_expr_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_stmt_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_stmt_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_stmt_other.

Proof completed.
 < Prove_Constraint matchEval:host:proj_fun_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_fun_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_param_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_param_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_program_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_program_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_typ_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_typ_is.

Proof completed.
 < Prove_Constraint matchEval:host:proj_value_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_value_is.

Proof completed.
 < Add_Proj_Rel matchEval:host:is_expr,
   matchEval:host:is_args,
   matchEval:host:is_recFieldExprs.

Proof completed.
 < Prove_Ext_Ind matchEval:host:is_expr,
   matchEval:host:is_args,
   matchEval:host:is_recFieldExprs.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Add_Proj_Rel matchEval:host:is_stmt.

Proof completed.
 < Prove_Ext_Ind matchEval:host:is_stmt.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Prove matchEval:host:is_args_nilArgs_or_consArgs.

Proof completed.
 < Prove matchEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs.

Proof completed.
 < Prove matchEval:host:vars_unique.

Proof completed.
 < Prove matchEval:host:vars_is.

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

Proof completed.
 < Prove_Constraint matchEval:host:proj_expr_vars.

Proof completed.
 < Prove matchEval:host:typeOf_isTy.

Proof completed.
 < Prove matchEval:host:stmtOK_isCtx.

Proof completed.
 < Prove matchEval:host:stmtOK_keep_scopes.

Proof completed.
 < Prove matchEval:host:stmtOK_older_scopes_same.

Proof completed.
 < Prove matchEval:host:stmtOK_first_scope_lookup_same.

Proof completed.
 < Prove matchEval:host:typeOf_unique.

Proof completed.
 < Prove matchEval:host:stmtOK_unique.

Proof completed.
 < Prove matchEval:host:paramTy_is.

Proof completed.
 < Prove matchEval:host:getFunInfo_is.

Proof completed.
 < Prove matchEval:host:paramTy_exists.

Proof completed.
 < Prove matchEval:host:getFunInfo_exists.

Proof completed.
 < Prove matchEval:host:matchInt_is.

Proof completed.
 < Prove matchEval:host:matchString_is.

Proof completed.
 < Prove matchEval:host:matchRec_is.

Proof completed.
 < Prove matchEval:host:evalExpr_isValue,
         matchEval:host:evalStmt_isCtx,
         matchEval:host:evalArgs_isValue,
         matchEval:host:evalRecFields_isValue.

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

Proof completed.
 < Prove matchEval:host:paramName_is.

Proof completed.
 < Prove matchEval:host:getFunEvalInfo_is.

Proof completed.
 < Prove matchEval:host:evalProgram_isOutput.

Proof completed.
 < Prove matchEval:host:evalStmt_names_same.

Proof completed.
 < Prove matchEval:host:matchInt_unique.

Proof completed.
 < Prove matchEval:host:matchTrue_matchFalse_exclusive.

Proof completed.
 < Prove matchEval:host:matchString_unique.

Proof completed.
 < Prove matchEval:host:matchRec_unique.

Proof completed.
 < Prove matchEval:host:matchInt_matchTrue_exclusive.

Proof completed.
 < Prove matchEval:host:matchInt_matchFalse_exclusive.

Proof completed.
 < Prove matchEval:host:matchInt_matchString_exclusive.

Proof completed.
 < Prove matchEval:host:matchInt_matchRec_exclusive.

Proof completed.
 < Prove matchEval:host:matchString_matchTrue_exclusive.

Proof completed.
 < Prove matchEval:host:matchString_matchFalse_exclusive.

Proof completed.
 < Prove matchEval:host:matchString_matchRec_exclusive.

Proof completed.
 < Prove matchEval:host:matchRec_matchTrue_exclusive.

Proof completed.
 < Prove matchEval:host:matchRec_matchFalse_exclusive.

Proof completed.
 < Prove matchEval:host:evalExpr_rel,
         matchEval:host:evalExpr_rel_output,
         matchEval:host:evalStmt_newNameScopes_output,
         matchEval:host:evalStmt_newNameScopes,
         matchEval:host:evalArgs_rel,
         matchEval:host:evalArgs_rel_output,
         matchEval:host:evalRecFields_rel,
         matchEval:host:evalRecFields_rel_output.

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

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

Proof completed.
 < Prove matchEval:host:evalExpr_rel_exists_ES,
         matchEval:host:evalStmt_newNameScopes_exists_ES,
         matchEval:host:evalArgs_rel_exists_ES,
         matchEval:host:evalRecFields_rel_exists_ES.

Proof completed.
 < Prove matchEval:host:evalExpr_scopes_same,
         matchEval:host:evalStmt_scopes_same,
         matchEval:host:evalStmt_scopes_same_ctx,
         matchEval:host:evalArgs_scopes_same,
         matchEval:host:evalRecFields_scopes_same.

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

Proof completed.
 < Prove_Constraint matchEval:host:proj_matchInt.

Proof completed.
 < Prove_Constraint matchEval:host:proj_matchTrue.

Proof completed.
 < Prove_Constraint matchEval:host:proj_matchFalse.

Proof completed.
 < Prove_Constraint matchEval:host:proj_matchString.

Proof completed.
 < Prove_Constraint matchEval:host:proj_matchRec.

Proof completed.
 < Add_Proj_Rel matchEval:host:matchInt.

Proof completed.
 < Prove_Ext_Ind matchEval:host:matchInt.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Add_Proj_Rel matchEval:host:matchTrue.

Proof completed.
 < Prove_Ext_Ind matchEval:host:matchTrue.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Add_Proj_Rel matchEval:host:matchFalse.

Proof completed.
 < Prove_Ext_Ind matchEval:host:matchFalse.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Add_Proj_Rel matchEval:host:matchRec.

Proof completed.
 < Prove_Ext_Ind matchEval:host:matchRec.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Add_Proj_Rel matchEval:host:matchString.

Proof completed.
 < Prove_Ext_Ind matchEval:host:matchString.

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
 < Prove matchEval:host:projedVal_is.

Proof completed.
 < Prove matchEval:host:projedVal_matchInt.

Proof completed.
 < Prove matchEval:host:projedVal_matchString.

Proof completed.
 < Prove matchEval:host:projedVal_matchTrue.

Proof completed.
 < Prove matchEval:host:projedVal_matchFalse.

Proof completed.
 < Prove matchEval:host:projedVal_matchRec.

Proof completed.
 < Prove_Constraint matchEval:host:matchInt_proj.

Proof completed.
 < Prove_Constraint matchEval:host:matchTrue_proj.

Proof completed.
 < Prove_Constraint matchEval:host:matchFalse_proj.

Proof completed.
 < Prove_Constraint matchEval:host:matchString_proj.

Proof completed.
 < Prove_Constraint matchEval:host:matchRec_proj.

Proof completed.
 < Prove matchEval:host:matchInt_projedVal.

Proof completed.
 < Prove matchEval:host:matchTrue_projedVal.

Proof completed.
 < Prove matchEval:host:matchFalse_projedVal.

Proof completed.
 < Prove matchEval:host:matchString_projedVal.

Proof completed.
 < Prove matchEval:host:matchRec_projedVal.

Proof completed.
 < Prove_Constraint matchEval:host:proj_evalExpr_forward.

Proof completed.
 < Prove_Constraint matchEval:host:proj_evalStmt_forward.

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

Proof completed.
 < Prove matchEval:host:paramName_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_paramName_forward.

Proof completed.
 < Prove_Constraint matchEval:host:proj_paramName_back.

Proof completed.
 < Prove matchEval:host:getFunEvalInfo_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_getFunEvalInfo_forward.

Proof completed.
 < Prove_Constraint matchEval:host:proj_getFunEvalInfo_back.

Proof completed.
 < Prove matchEval:host:evalProgram_unique.

Proof completed.
 < Prove_Constraint matchEval:host:proj_evalProgram_forward.

Proof completed.
 < Prove_Constraint matchEval:host:proj_evalProgram_back.

Proof completed.
 < Prove matchEval:host:matchRec_typePres.

Proof completed.
 < Prove matchEval:host:evalExpr_typePres,
         matchEval:host:evalStmt_typePres,
         matchEval:host:evalArgs_typePres,
         matchEval:host:evalRecFields_typePres.

Proof completed.
 < Prove matchEval:host:paramTy_paramName_same.

Proof completed.
 < Prove matchEval:host:funOK_getFunEvalInfo_related.

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

Proof completed.
 < Prove matchEval:host:evalProgram_output_forms.

Proof completed.
 < Prove matchEval:host:paramName_exists.

Proof completed.
 < Prove matchEval: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 E T,
         IsE : is_expr E ->
         Trans : transE E T ->
         is_expr T
      on Trans as IH_Ealso
   
      transA_is : forall A T,
         IsA : is_args A ->
         Trans : transA A T ->
         is_args T
      on Trans as IH_A,
      transRF_is : forall RF T,
         IsRF : is_recFieldExprs RF ->
         Trans : transRF RF T ->
         is_recFieldExprs T
      on Trans as IH_RF.

Subgoal 1.1:

Variables: I
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (num I)
Trans : transE (num I) (num I) @
============================
 is_expr (num I)
 < search.

Subgoal 1.2:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (plus E1 E2)
Trans : transE (plus E1 E2) (plus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (plus E11 E21)
 < case IsE.

Subgoal 1.2:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (plus E1 E2) (plus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (plus E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.2:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (plus E1 E2) (plus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (plus E1 E2) (plus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (minus E1 E2)
Trans : transE (minus E1 E2) (minus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (minus E11 E21)
 < case IsE.

Subgoal 1.3:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (minus E1 E2) (minus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (minus E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.3:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (minus E1 E2) (minus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (minus E1 E2) (minus E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (mult E1 E2)
Trans : transE (mult E1 E2) (mult E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (mult E11 E21)
 < case IsE.

Subgoal 1.4:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (mult E1 E2) (mult E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (mult E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.4:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (mult E1 E2) (mult E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (mult E1 E2) (mult E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (div E1 E2)
Trans : transE (div E1 E2) (div E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (div E11 E21)
 < case IsE.

Subgoal 1.5:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (div E1 E2) (div E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (div E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.5:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (div E1 E2) (div E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (div E1 E2) (div E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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:

IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr true
Trans : transE true true @
============================
 is_expr true
 < search.

Subgoal 1.7:

IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr false
Trans : transE false false @
============================
 is_expr false
 < search.

Subgoal 1.8:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (and E1 E2)
Trans : transE (and E1 E2) (and E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (and E11 E21)
 < case IsE.

Subgoal 1.8:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (and E1 E2) (and E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (and E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.8:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (and E1 E2) (and E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (and E1 E2) (and E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (or E1 E2)
Trans : transE (or E1 E2) (or E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (or E11 E21)
 < case IsE.

Subgoal 1.9:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (or E1 E2) (or E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (or E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.9:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (or E1 E2) (or E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (or E1 E2) (or E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (not E1)
Trans : transE (not E1) (not E2) @
Trans1 : transE E1 E2 *
============================
 is_expr (not E2)
 < case IsE.

Subgoal 1.10:

Variables: E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (not E1) (not E2) @
Trans1 : transE E1 E2 *
H1 : is_expr E1
============================
 is_expr (not E2)
 < apply IH_E to _ Trans1.

Subgoal 1.10:

Variables: E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (not E1) (not E2) @
Trans1 : transE E1 E2 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (not E2)
 < search.

Subgoal 1.11:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (greater E1 E2)
Trans : transE (greater E1 E2) (greater E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (greater E11 E21)
 < case IsE.

Subgoal 1.11:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (greater E1 E2) (greater E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (greater E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.11:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (greater E1 E2) (greater E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (greater E1 E2) (greater E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (eq E1 E2)
Trans : transE (eq E1 E2) (eq E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (eq E11 E21)
 < case IsE.

Subgoal 1.12:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (eq E1 E2) (eq E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (eq E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.12:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (eq E1 E2) (eq E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (eq E1 E2) (eq E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: S
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (stringLit S)
Trans : transE (stringLit S) (stringLit S) @
============================
 is_expr (stringLit S)
 < search.

Subgoal 1.14:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (appString E1 E2)
Trans : transE (appString E1 E2) (appString E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
============================
 is_expr (appString E11 E21)
 < case IsE.

Subgoal 1.14:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (appString E1 E2) (appString E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (appString E11 E21)
 < apply IH_E to _ Trans1.

Subgoal 1.14:

Variables: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (appString E1 E2) (appString E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: E21 E11 E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (appString E1 E2) (appString E11 E21) @
Trans1 : transE E1 E11 *
Trans2 : transE 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: X
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (name X)
Trans : transE (name X) (name X) @
============================
 is_expr (name X)
 < search.

Subgoal 1.16:

Variables: A1 F A
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (call F A)
Trans : transE (call F A) (call F A1) @
Trans1 : transA A A1 *
============================
 is_expr (call F A1)
 < case IsE.

Subgoal 1.16:

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

Subgoal 1.16:

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

Subgoal 1.17:

Variables: RF1 RF
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (recBuild RF)
Trans : transE (recBuild RF) (recBuild RF1) @
Trans1 : transRF RF RF1 *
============================
 is_expr (recBuild RF1)
 < case IsE.

Subgoal 1.17:

Variables: RF1 RF
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (recBuild RF) (recBuild RF1) @
Trans1 : transRF RF RF1 *
H1 : is_recFieldExprs RF
============================
 is_expr (recBuild RF1)
 < apply IH_RF to _ Trans1.

Subgoal 1.17:

Variables: RF1 RF
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (recBuild RF) (recBuild RF1) @
Trans1 : transRF RF RF1 *
H1 : is_recFieldExprs RF
H2 : is_recFieldExprs RF1
============================
 is_expr (recBuild RF1)
 < search.

Subgoal 1.18:

Variables: F E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (recFieldAccess E1 F)
Trans : transE (recFieldAccess E1 F) (recFieldAccess E2 F) @
Trans1 : transE E1 E2 *
============================
 is_expr (recFieldAccess E2 F)
 < case IsE.

Subgoal 1.18:

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

Subgoal 1.18:

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

Subgoal 1.19:

Variables: Ty E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr (errorExpr E1 Ty)
Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE E1 E2 *
============================
 is_expr (errorExpr E2 Ty)
 < case IsE.

Subgoal 1.19:

Variables: Ty E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE E1 E2 *
H1 : is_expr E1
H2 : is_typ Ty
============================
 is_expr (errorExpr E2 Ty)
 < apply IH_E to _ Trans1.

Subgoal 1.19:

Variables: Ty E2 E1
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE E1 E2 *
H1 : is_expr E1
H2 : is_typ Ty
H3 : is_expr E2
============================
 is_expr (errorExpr E2 Ty)
 < search.

Subgoal 1.20:

Variables: T E_P
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr <unknown I expr>
Trans : transE <unknown I expr> T @
Trans1 : |{expr}- <unknown I expr> ~~> E_P
Trans2 : transE E_P T *
============================
 is_expr T
 < apply proj_expr_is to Trans1 _.

Subgoal 1.20:

Variables: T E_P
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr <unknown I expr>
Trans : transE <unknown I expr> T @
Trans1 : |{expr}- <unknown I expr> ~~> E_P
Trans2 : transE E_P T *
H1 : is_expr E_P
============================
 is_expr T
 < apply IH_E to _ Trans2.

Subgoal 1.20:

Variables: T E_P
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsE : is_expr <unknown I expr>
Trans : transE <unknown I expr> T @
Trans1 : |{expr}- <unknown I expr> ~~> E_P
Trans2 : transE E_P T *
H1 : is_expr E_P
H2 : is_expr T
============================
 is_expr T
 < search.

Subgoal 2:

Variables: A T
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsA : is_args A
Trans : transA A T @
============================
 is_args T
 < Trans: case Trans (keep).

Subgoal 2.1:

IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsA : is_args nilArgs
Trans : transA nilArgs nilArgs @
============================
 is_args nilArgs
 < search.

Subgoal 2.2:

Variables: A2 E1 A1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsA : is_args (consArgs E A1)
Trans : transA (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE E E1 *
Trans2 : transA A1 A2 *
============================
 is_args (consArgs E1 A2)
 < case IsA.

Subgoal 2.2:

Variables: A2 E1 A1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transA (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE E E1 *
Trans2 : transA A1 A2 *
H1 : is_expr E
H2 : is_args A1
============================
 is_args (consArgs E1 A2)
 < apply IH_E to _ Trans1.

Subgoal 2.2:

Variables: A2 E1 A1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transA (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE E E1 *
Trans2 : transA 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 2.2:

Variables: A2 E1 A1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transA (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE E E1 *
Trans2 : transA 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 3:

Variables: RF T
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsRF : is_recFieldExprs RF
Trans : transRF RF T @
============================
 is_recFieldExprs T
 < Trans: case Trans (keep).

Subgoal 3.1:

IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsRF : is_recFieldExprs nilRecFieldExprs
Trans : transRF nilRecFieldExprs nilRecFieldExprs @
============================
 is_recFieldExprs nilRecFieldExprs
 < search.

Subgoal 3.2:

Variables: RF2 E1 F RF1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
IsRF : is_recFieldExprs (consRecFieldExprs F E RF1)
Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE E E1 *
Trans2 : transRF RF1 RF2 *
============================
 is_recFieldExprs (consRecFieldExprs F E1 RF2)
 < case IsRF.

Subgoal 3.2:

Variables: RF2 E1 F RF1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE E E1 *
Trans2 : transRF 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 3.2:

Variables: RF2 E1 F RF1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE E E1 *
Trans2 : transRF 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 3.2:

Variables: RF2 E1 F RF1 E
IH_E : forall E T, is_expr E -> transE E T * -> is_expr T
IH_A : forall A T, is_args A -> transA A T * -> is_args T
IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T
Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE E E1 *
Trans2 : transRF 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.
 < Extensible_Theorem
      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_C.

Subgoal 1.1:

Variables: Names'
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_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'
IsS : is_stmt noop
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' noop noop Names' @
============================
 is_stmt noop
 < search.

Subgoal 1.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 1.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 1.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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_C to _ _ Trans1.

Subgoal 1.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 1.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 1.3:

Variables: Names1 Scope X E1 Ty E
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_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'
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 E E1
============================
 is_stmt (declare Ty X E1)
 < case IsS.

Subgoal 1.3:

Variables: Names1 Scope X E1 Ty E
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_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'
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 E E1
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 is_stmt (declare Ty X E1)
 < apply transE_is to _ Trans1.

Subgoal 1.3:

Variables: Names1 Scope X E1 Ty E
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_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'
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 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 1.4:

Variables: Names' E1 X E
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_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'
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 E E1
============================
 is_stmt (assign X E1)
 < case IsS.

Subgoal 1.4:

Variables: Names' E1 X E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE E E1
H1 : is_string X
H2 : is_expr E
============================
 is_stmt (assign X E1)
 < apply transE_is to _ Trans1.

Subgoal 1.4:

Variables: Names' E1 X E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE E E1
H1 : is_string X
H2 : is_expr E
H3 : is_expr E1
============================
 is_stmt (assign X E1)
 < search.

Subgoal 1.5:

Variables: Names' E1 Fs Rec E
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_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'
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 E E1
============================
 is_stmt (recUpdate Rec Fs E1)
 < case IsS.

Subgoal 1.5:

Variables: Names' E1 Fs Rec E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE E E1
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
============================
 is_stmt (recUpdate Rec Fs E1)
 < apply transE_is to _ Trans1.

Subgoal 1.5:

Variables: Names' E1 Fs Rec E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE 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 1.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
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 Cond Cond1
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < case IsS.

Subgoal 1.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE 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 transE_is to _ Trans1.

Subgoal 1.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE 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 1.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE 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 1.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE 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 1.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
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_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'
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 Cond Cond1
Trans2 : transS ([]::Names') Body Body1 Names2 *
============================
 is_stmt (while Cond1 Body1)
 < case IsS.

Subgoal 1.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Cond Cond1
Trans2 : transS ([]::Names') Body Body1 Names2 *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 is_stmt (while Cond1 Body1)
 < apply transE_is to _ Trans1.

Subgoal 1.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE 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 1.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE 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 1.8:

Variables: Names' Names2 S2 S1
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_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'
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 1.8:

Variables: Names' Names2 S2 S1
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_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'
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 1.8:

Variables: Names' Names2 S2 S1
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_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'
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 1.9:

Variables: Names' E1 E
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_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'
IsS : is_stmt (printVal E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE E E1
============================
 is_stmt (printVal E1)
 < case IsS.

Subgoal 1.9:

Variables: Names' E1 E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE E E1
H1 : is_expr E
============================
 is_stmt (printVal E1)
 < apply transE_is to _ Trans1.

Subgoal 1.9:

Variables: Names' E1 E
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_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'
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE E E1
H1 : is_expr E
H2 : is_expr E1
============================
 is_stmt (printVal E1)
 < search.

Subgoal 1.10:

Variables: Names T Names' N S_P
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_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'
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 1.10:

Variables: Names T Names' N S_P
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_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'
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 1.10:

Variables: Names T Names' N S_P
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_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'
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 1.10:

Variables: Names T Names' N S_P
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_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'
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 2.1:

Variables: Names'
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_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'
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 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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_C to _ _ Trans1.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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_C to _ _ Trans2.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
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_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'
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 2.3:

Variables: Names1 Scope X E1 Ty E
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_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'
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 E E1
============================
 is_list (is_list is_string) ((X::Scope)::Names1)
 < case IsS.

Subgoal 2.3:

Variables: Names1 Scope X E1 Ty E
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_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'
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 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 2.3:

Variables: Names1 Scope X E1 Ty E
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_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'
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE 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 2.4:

Variables: Names' E1 X E
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_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'
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 E E1
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 2.5:

Variables: Names' E1 Fs Rec E
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_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'
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 E E1
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
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_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'
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 Cond Cond1
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 2.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
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_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'
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 Cond Cond1
Trans2 : transS ([]::Names') Body Body1 Names2 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 2.8:

Variables: Names' Names2 S2 S1
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_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'
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 2.9:

Variables: Names' E1 E
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_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'
IsS : is_stmt (printVal E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE E E1
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 2.10:

Variables: Names T Names' N S_P
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_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'
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 2.10:

Variables: Names T Names' N S_P
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_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'
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 2.10:

Variables: Names T Names' N S_P
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_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'
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_C to _ _ Trans3.

Subgoal 2.10:

Variables: Names T Names' N S_P
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_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'
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.

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 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 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 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 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 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 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.
 < Define ctx_names : (list (list (pair K I))) -> (list (list K)) -> prop by
   ctx_names [] [];
   ctx_names (A::ARest) (B::BRest) :=
     ((forall K I, mem (K, I) A -> mem K B) /\
     (forall K, mem K B -> exists I, mem (K, I) A)) /\
     ctx_names ARest BRest.


 < Theorem ctx_names_add  [K, I] :
     forall A B AS BS (K : K) (I : I),
       ctx_names (AS::A) (BS::B) -> ctx_names (((K, I)::AS)::A) ((K::BS)::B).

============================
 forall A B AS BS K I,
   ctx_names (AS::A) (BS::B) -> ctx_names (((K, I)::AS)::A) ((K::BS)::B)
 < intros CN.

Variables: A B AS BS K I
CN : ctx_names (AS::A) (BS::B)
============================
 ctx_names (((K, I)::AS)::A) ((K::BS)::B)
 < CN: case CN.

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 ctx_names (((K, I)::AS)::A) ((K::BS)::B)
 < unfold .

Subgoal 1:

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 forall K1 I1, mem (K1, I1) ((K, I)::AS) -> mem K1 (K::BS)
 < intros M.

Subgoal 1:

Variables: A B AS BS K I K1 I1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem (K1, I1) ((K, I)::AS)
============================
 mem K1 (K::BS)
 < M: case M.

Subgoal 1.1:

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 mem K (K::BS)
 < search.

Subgoal 1.2:

Variables: A B AS BS K I K1 I1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem (K1, I1) AS
============================
 mem K1 (K::BS)
 < apply CN to M.

Subgoal 1.2:

Variables: A B AS BS K I K1 I1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem (K1, I1) AS
H1 : mem K1 BS
============================
 mem K1 (K::BS)
 < search.

Subgoal 2:

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 forall K1, mem K1 (K::BS) -> exists I1, mem (K1, I1) ((K, I)::AS)
 < intros M.

Subgoal 2:

Variables: A B AS BS K I K1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem K1 (K::BS)
============================
 exists I1, mem (K1, I1) ((K, I)::AS)
 < M: case M.

Subgoal 2.1:

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 exists I1, mem (K, I1) ((K, I)::AS)
 < search.

Subgoal 2.2:

Variables: A B AS BS K I K1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem K1 BS
============================
 exists I1, mem (K1, I1) ((K, I)::AS)
 < apply CN1 to M.

Subgoal 2.2:

Variables: A B AS BS K I K1 I1
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
M : mem K1 BS
H1 : mem (K1, I1) AS
============================
 exists I1, mem (K1, I1) ((K, I)::AS)
 < search.

Subgoal 3:

Variables: A B AS BS K I
CN : forall K I, mem (K, I) AS -> mem K BS
CN1 : forall K, mem K BS -> exists I, mem (K, I) AS
CN2 : ctx_names A B
============================
 ctx_names A B
 < search.

Proof completed.
 < Theorem ctx_names_add_scope  [K, I] :
     forall (A : list (list (pair K I))) B,
       ctx_names A B -> ctx_names ([]::A) ([]::B).

============================
 forall A B, ctx_names A B -> ctx_names ([]::A) ([]::B)
 < intros CN.

Variables: A B
CN : ctx_names A B
============================
 ctx_names ([]::A) ([]::B)
 < unfold .

Subgoal 1:

Variables: A B
CN : ctx_names A B
============================
 forall K I, mem (K, I) [] -> mem K []
 < intros M.

Subgoal 1:

Variables: A B K I
CN : ctx_names A B
M : mem (K, I) []
============================
 mem K []
 < case M.

Subgoal 2:

Variables: A B
CN : ctx_names A B
============================
 forall K, mem K [] -> exists I, mem (K, I) []
 < intros M.

Subgoal 2:

Variables: A B K
CN : ctx_names A B
M : mem K []
============================
 exists I, mem (K, I) []
 < case M.

Subgoal 3:

Variables: A B
CN : ctx_names A B
============================
 ctx_names A B
 < search.

Proof completed.
 < Theorem ctx_names_lookupScopes  [K, I] :
     forall A B (K : K) (I : I), ctx_names A B -> lookupScopes K A I -> mems K B.

============================
 forall A B K I, ctx_names A B -> lookupScopes K A I -> mems K B
 < induction on 2.

IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
============================
 forall A B K I, ctx_names A B -> lookupScopes K A I @ -> mems K B
 < intros CN L.

Variables: A B K I
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
CN : ctx_names A B
L : lookupScopes K A I @
============================
 mems K B
 < L: case L.

Subgoal 1:

Variables: B K I Rest L
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
CN : ctx_names (L::Rest) B
L : lookup L K I
============================
 mems K B
 < M: apply lookup_mem to L.

Subgoal 1:

Variables: B K I Rest L
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
CN : ctx_names (L::Rest) B
L : lookup L K I
M : mem (K, I) L
============================
 mems K B
 < CN: case CN.

Subgoal 1:

Variables: K I Rest L BRest B1
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
L : lookup L K I
M : mem (K, I) L
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 mems K (B1::BRest)
 < apply CN to M.

Subgoal 1:

Variables: K I Rest L BRest B1
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
L : lookup L K I
M : mem (K, I) L
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : mem K B1
============================
 mems K (B1::BRest)
 < search.

Subgoal 2:

Variables: B K I Rest L
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
CN : ctx_names (L::Rest) B
L : no_lookup L K
L1 : lookupScopes K Rest I *
============================
 mems K B
 < CN: case CN.

Subgoal 2:

Variables: K I Rest L BRest B1
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
L : no_lookup L K
L1 : lookupScopes K Rest I *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 mems K (B1::BRest)
 < apply IH to CN2 L1.

Subgoal 2:

Variables: K I Rest L BRest B1
IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B
L : no_lookup L K
L1 : lookupScopes K Rest I *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : mems K BRest
============================
 mems K (B1::BRest)
 < search.

Proof completed.
 < Theorem ctx_names_replaceScopes :
     forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' -> ctx_names A' B.

============================
 forall A B X V A',
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
   ctx_names A B -> replaceScopes X V A A' -> ctx_names A' B
 < induction on 4.

IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
============================
 forall A B X V A',
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
   ctx_names A B -> replaceScopes X V A A' @ -> ctx_names A' B
 < intros IsA IsB CN RS.

Variables: A B X V A'
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list is_string) B
CN : ctx_names A B
RS : replaceScopes X V A A' @
============================
 ctx_names A' B
 < RS: case RS.

Subgoal 1:

Variables: B X V I Rest LRemain L
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) B
CN : ctx_names (L::Rest) B
RS : mem (X, I) L
RS1 : remove_all L X LRemain
============================
 ctx_names (((X, V)::LRemain)::Rest) B
 < CN: case CN.

Subgoal 1:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 ctx_names (((X, V)::LRemain)::Rest) (B1::BRest)
 < unfold .

Subgoal 1.1:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 forall K I, mem (K, I) ((X, V)::LRemain) -> mem K B1
 < intros M.

Subgoal 1.1:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem (K, I1) ((X, V)::LRemain)
============================
 mem K B1
 < M: case M.

Subgoal 1.1.1:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 mem X B1
 < apply CN to RS.

Subgoal 1.1.1:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : mem X B1
============================
 mem X B1
 < search.

Subgoal 1.1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem (K, I1) LRemain
============================
 mem K B1
 < M': apply mem_after_remove_all_before to RS1 M.

Subgoal 1.1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem (K, I1) LRemain
M' : mem (K, I1) L
============================
 mem K B1
 < apply CN to M'.

Subgoal 1.1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem (K, I1) LRemain
M' : mem (K, I1) L
H1 : mem K B1
============================
 mem K B1
 < search.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 forall K, mem K B1 -> exists I, mem (K, I) ((X, V)::LRemain)
 < intros M.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < M': apply CN1 to M.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < case IsA.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < IsKP: apply mem_is to _ M'.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsKP : is_pair is_string is_value (K, I1)
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < IsK: case IsKP.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < IsXP: apply mem_is to _ RS.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
IsXP : is_pair is_string is_value (X, I)
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < IsX: case IsXP.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
IsX : is_string X
IsX1 : is_value I
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < Or: apply is_string_eq_or_not to IsK IsX.

Subgoal 1.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
IsX : is_string X
IsX1 : is_value I
Or : K = X \/ (K = X -> false)
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < E: case Or.

Subgoal 1.2.1:

Variables: X V I Rest LRemain L BRest B1 I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem X B1
M' : mem (X, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string X
IsK1 : is_value I1
IsX : is_string X
IsX1 : is_value I
============================
 exists I, mem (X, I) ((X, V)::LRemain)
 < search.

Subgoal 1.2.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
IsX : is_string X
IsX1 : is_value I
E : K = X -> false
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < apply mem_before_remove_all_after to RS1 M' _.

Subgoal 1.2.2:

Variables: X V I Rest LRemain L BRest B1 K I1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
M : mem K B1
M' : mem (K, I1) L
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
IsK : is_string K
IsK1 : is_value I1
IsX : is_string X
IsX1 : is_value I
E : K = X -> false
H3 : mem (K, I1) LRemain
============================
 exists I, mem (K, I) ((X, V)::LRemain)
 < search.

Subgoal 1.3:

Variables: X V I Rest LRemain L BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : mem (X, I) L
RS1 : remove_all L X LRemain
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 ctx_names Rest BRest
 < search.

Subgoal 2:

Variables: B X V New L Rest
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) B
CN : ctx_names (L::Rest) B
RS : no_lookup L X
RS1 : replaceScopes X V Rest New *
============================
 ctx_names (L::New) B
 < CN: case CN.

Subgoal 2:

Variables: X V New L Rest BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list is_string) (B1::BRest)
RS : no_lookup L X
RS1 : replaceScopes X V Rest New *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
============================
 ctx_names (L::New) (B1::BRest)
 < case IsA.

Subgoal 2:

Variables: X V New L Rest BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
IsB : is_list (is_list is_string) (B1::BRest)
RS : no_lookup L X
RS1 : replaceScopes X V Rest New *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 ctx_names (L::New) (B1::BRest)
 < case IsB.

Subgoal 2:

Variables: X V New L Rest BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
RS : no_lookup L X
RS1 : replaceScopes X V Rest New *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
H3 : is_list is_string B1
H4 : is_list (is_list is_string) BRest
============================
 ctx_names (L::New) (B1::BRest)
 < apply IH to _ _ CN2 RS1.

Subgoal 2:

Variables: X V New L Rest BRest B1
IH : forall A B X V A',
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B ->
       ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B
RS : no_lookup L X
RS1 : replaceScopes X V Rest New *
CN : forall K I, mem (K, I) L -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) L
CN2 : ctx_names Rest BRest
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
H3 : is_list is_string B1
H4 : is_list (is_list is_string) BRest
H5 : ctx_names New BRest
============================
 ctx_names (L::New) (B1::BRest)
 < 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_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
      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.

Subgoal 1:

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 2.1:

Variables: Names T Names' FE Scope EE
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.1:

Variables: Names' FE Scope EE
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 to _ _ _ _ _ Trans Ev1.

Subgoal 2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 BRest B
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 S21 S11 BRest B Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.2:

Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 to _ _ _ _ _ Trans1 Ev2.

Subgoal 2.2:

Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.3:

Variables: Names T Names' FE Scope EE O V X E Ty
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
============================
 ctx_names (((X, V)::Scope)::EE) Names'
 < case IsS.

Subgoal 2.3:

Variables: Names T Names' FE Scope EE O V X E Ty
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 ctx_names (((X, V)::Scope)::EE) Names'
 < Trans: case Trans.

Subgoal 2.3:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
============================
 ctx_names (((X, V)::Scope)::EE) ((X::Scope1)::Names1)
 < C: case Ctxs.

Subgoal 2.3:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 ctx_names (((X, V)::Scope)::EE) ((X::Scope1)::Names1)
 < unfold .

Subgoal 2.3.1:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 forall K I, mem (K, I) ((X, V)::Scope) -> mem K (X::Scope1)
 < intros M.

Subgoal 2.3.1:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem (K, I) ((X, V)::Scope)
============================
 mem K (X::Scope1)
 < M: case M.

Subgoal 2.3.1.1:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 mem X (X::Scope1)
 < search.

Subgoal 2.3.1.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem (K, I) Scope
============================
 mem K (X::Scope1)
 < apply C to M.

Subgoal 2.3.1.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem (K, I) Scope
H4 : mem K Scope1
============================
 mem K (X::Scope1)
 < search.

Subgoal 2.3.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 forall K, mem K (X::Scope1) -> exists I, mem (K, I) ((X, V)::Scope)
 < intros M.

Subgoal 2.3.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem K (X::Scope1)
============================
 exists I, mem (K, I) ((X, V)::Scope)
 < M: case M.

Subgoal 2.3.2.1:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 exists I, mem (X, I) ((X, V)::Scope)
 < search.

Subgoal 2.3.2.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem K Scope1
============================
 exists I, mem (K, I) ((X, V)::Scope)
 < apply C1 to M.

Subgoal 2.3.2.2:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
M : mem K Scope1
H4 : mem (K, I) Scope
============================
 exists I, mem (K, I) ((X, V)::Scope)
 < search.

Subgoal 2.3.3:

Variables: FE Scope EE O V X E Ty Names1 Scope1 E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
C : forall K I, mem (K, I) Scope -> mem K Scope1
C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope
C2 : ctx_names EE Names1
============================
 ctx_names EE Names1
 < search.

Subgoal 2.4:

Variables: Names T Names' FE Scope EE EE' O V E X
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 2.4:

Variables: Names T Names' FE Scope EE EE' O V E X
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 2.4:

Variables: Names' FE Scope EE EE' O V E X E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
============================
 ctx_names EE' Names'
 < apply ctx_names_replaceScopes to _ _ Ctxs Ev2.

Subgoal 2.4:

Variables: Names' FE Scope EE EE' O V E X E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
H3 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 2.5:

Variables: Names T Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 2.5:

Variables: Names T Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 2.5:

Variables: Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
============================
 ctx_names EE' Names'
 < apply ctx_names_replaceScopes to _ _ Ctxs Ev5.

Subgoal 2.5:

Variables: Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
H4 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 2.6:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 2.6:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 2.6:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to Ctxs.

Subgoal 2.6:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 ctx_names EE' Names'
 < C': apply IH to _ _ _ _ _ Trans1 Ev3.

Subgoal 2.6:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
C' : ctx_names (Scope1::EE') NamesTh
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans1.

Subgoal 2.6:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 (Scope'::Names')
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
C' : ctx_names (Scope1::EE') (Scope'::Names')
============================
 ctx_names EE' Names'
 < case C'.

Subgoal 2.6:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 (Scope'::Names')
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
H4 : forall K I, mem (K, I) Scope1 -> mem K Scope'
H5 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H6 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 2.7:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 2.7:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 2.7:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to Ctxs.

Subgoal 2.7:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 ctx_names EE' Names'
 < C': apply IH to _ _ _ _ _ Trans2 Ev3.

Subgoal 2.7:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
C' : ctx_names (Scope1::EE') NamesEl
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 2.7:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 (Scope'::Names')
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
C' : ctx_names (Scope1::EE') (Scope'::Names')
============================
 ctx_names EE' Names'
 < case C'.

Subgoal 2.7:

Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 (Scope'::Names')
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
H4 : forall K I, mem (K, I) Scope1 -> mem K Scope'
H5 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H6 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 2.8:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 2.8:

Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 ctx_names EE' Names'
 < Trans: case Trans (keep).

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to Ctxs.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 ctx_names EE' Names'
 < C': apply IH to _ _ _ _ _ Trans2 Ev3.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
C' : ctx_names (Scope1::EE3) Names2
============================
 ctx_names EE' Names'
 < C'': case C'.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 BRest B
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B::BRest)
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
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 EE3 BRest
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
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 EE3 Names'
============================
 ctx_names EE' Names'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev3.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
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 EE3 Names'
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3)
============================
 ctx_names EE' Names'
 < case IsEE4+.

Subgoal 2.8:

Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C+ : ctx_names ([]::(Scope::EE)) ([]::Names')
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 EE3 Names'
H3 : is_list (is_pair is_string is_value) Scope1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < case Ctxs.

Subgoal 2.8:

Variables: FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::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 EE3 (B1::BRest1)
H3 : is_list (is_pair is_string is_value) Scope1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : forall K I, mem (K, I) Scope -> mem K B1
H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest1
============================
 ctx_names EE' (B1::BRest1)
 < case C''2 (keep).

Subgoal 2.8:

Variables: FE Scope EE EE' O V O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O3 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::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 (A::ARest) (B1::BRest1)
H3 : is_list (is_pair is_string is_value) Scope1
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : forall K I, mem (K, I) Scope -> mem K B1
H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest1
H8 : forall K I, mem (K, I) A -> mem K B1
H9 : forall K, mem K B1 -> exists I, mem (K, I) A
H10 : ctx_names ARest BRest1
============================
 ctx_names EE' (B1::BRest1)
 < apply IH to _ _ _ _ _ Trans Ev4.

Subgoal 2.8:

Variables: FE Scope EE EE' O V O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O3 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::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 (A::ARest) (B1::BRest1)
H3 : is_list (is_pair is_string is_value) Scope1
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : forall K I, mem (K, I) Scope -> mem K B1
H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest1
H8 : forall K I, mem (K, I) A -> mem K B1
H9 : forall K, mem K B1 -> exists I, mem (K, I) A
H10 : ctx_names ARest BRest1
H11 : ctx_names EE' (B1::BRest1)
============================
 ctx_names EE' (B1::BRest1)
 < search.

Subgoal 2.9:

Variables: Names T Names' FE Scope EE O V Body Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
============================
 ctx_names (Scope::EE) Names'
 < case IsS.

Subgoal 2.9:

Variables: Names T Names' FE Scope EE O V Body Cond
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
============================
 ctx_names (Scope::EE) Names'
 < Trans: case Trans.

Subgoal 2.9:

Variables: Names' FE Scope EE O V Body Cond Names2 Body2 Cond2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 2.10:

Variables: Names T Names' FE Scope EE EE' O Scope1 S1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.10:

Variables: Names T Names' FE Scope EE EE' O Scope1 S1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 Names2 S3
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 to _ _ _ _ _ Trans Ev1.

Subgoal 2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.11:

Variables: Names T Names' FE Scope EE O I O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 ctx_names (Scope::EE) Names'
 < case IsS.

Subgoal 2.11:

Variables: Names T Names' FE Scope EE O I O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 ctx_names (Scope::EE) Names'
 < Trans: case Trans.

Subgoal 2.11:

Variables: Names' FE Scope EE O I O2 E E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 2.12:

Variables: Names T Names' FE Scope EE O O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 ctx_names (Scope::EE) Names'
 < case IsS.

Subgoal 2.12:

Variables: Names T Names' FE Scope EE O O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 ctx_names (Scope::EE) Names'
 < Trans: case Trans.

Subgoal 2.12:

Variables: Names' FE Scope EE O O2 E E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 2.13:

Variables: Names T Names' FE Scope EE O O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 ctx_names (Scope::EE) Names'
 < case IsS.

Subgoal 2.13:

Variables: Names T Names' FE Scope EE O O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 ctx_names (Scope::EE) Names'
 < Trans: case Trans.

Subgoal 2.13:

Variables: Names' FE Scope EE O O2 E E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 2.14:

Variables: Names T Names' FE Scope EE O S1 O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 ctx_names (Scope::EE) Names'
 < case IsS.

Subgoal 2.14:

Variables: Names T Names' FE Scope EE O S1 O2 E
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 ctx_names (Scope::EE) Names'
 < Trans: case Trans.

Subgoal 2.14:

Variables: Names' FE Scope EE O S1 O2 E E2
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 to _ _ _ _ _ Trans2 Ev3.

Subgoal 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N EE''
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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 2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH : forall Names S T Names' FE Scope EE EE' O,
       is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names ->
       ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S 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.

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.
 < Define projedCtxs :
             (list (list (pair (string) value))) ->
             (list (list (pair (string) value))) ->
             prop by
   projedCtxs [] [];
   projedCtxs (A::ARest) (B::BRest) :=
     (((forall X VB, lookup B X VB -> exists VA, lookup A X VA) /\
     (forall X VA, lookup A X VA -> exists VB, lookup B X VB)) /\
     (forall X VA VB, lookup A X VA -> lookup B X VB -> projedVal VA VB)) /\
     projedCtxs ARest BRest.


 < Theorem projedCtxs_add_scope :
     forall A B, projedCtxs A B -> projedCtxs ([]::A) ([]::B).

============================
 forall A B, projedCtxs A B -> projedCtxs ([]::A) ([]::B)
 < intros PC.

Variables: A B
PC : projedCtxs A B
============================
 projedCtxs ([]::A) ([]::B)
 < unfold .

Subgoal 1:

Variables: A B
PC : projedCtxs A B
============================
 forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
 < intros LB.

Subgoal 1:

Variables: A B X VB
PC : projedCtxs A B
LB : lookup [] X VB
============================
 exists VA, lookup [] X VA
 < case LB.

Subgoal 2:

Variables: A B
PC : projedCtxs A B
============================
 forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
 < intros LA.

Subgoal 2:

Variables: A B X VA
PC : projedCtxs A B
LA : lookup [] X VA
============================
 exists VB, lookup [] X VB
 < case LA.

Subgoal 3:

Variables: A B
PC : projedCtxs A B
============================
 forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
 < intros LA.

Subgoal 3:

Variables: A B X VA VB
PC : projedCtxs A B
LA : lookup [] X VA
H1 : lookup [] X VB
============================
 projedVal VA VB
 < case LA.

Subgoal 4:

Variables: A B
PC : projedCtxs A B
============================
 projedCtxs A B
 < search.

Proof completed.
 < Theorem projedCtxs_lookupScopes_exists :
     forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB.

============================
 forall A B X VB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> lookupScopes X B VB -> exists VA,
     lookupScopes X A VA /\ projedVal VA VB
 < induction on 5.

IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
============================
 forall A B X VB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> lookupScopes X B VB @ -> exists VA,
     lookupScopes X A VA /\ projedVal VA VB
 < intros IsA IsB IsX PC LS.

Variables: A B X VB
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
LS : lookupScopes X B VB @
============================
 exists VA, lookupScopes X A VA /\ projedVal VA VB
 < LS: case LS.

Subgoal 1:

Variables: A X VB Rest L
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PC : projedCtxs A (L::Rest)
LS : lookup L X VB
============================
 exists VA, lookupScopes X A VA /\ projedVal VA VB
 < PC: case PC.

Subgoal 1:

Variables: X VB Rest L ARest A1
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
LS : lookup L X VB
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < LA: apply PC to LS.

Subgoal 1:

Variables: X VB Rest L ARest A1 VA
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
LS : lookup L X VB
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LA : lookup A1 X VA
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < apply PC2 to LA LS.

Subgoal 1:

Variables: X VB Rest L ARest A1 VA
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
LS : lookup L X VB
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LA : lookup A1 X VA
H1 : projedVal VA VB
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < search.

Subgoal 2:

Variables: A X VB Rest L
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PC : projedCtxs A (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
============================
 exists VA, lookupScopes X A VA /\ projedVal VA VB
 < PC: case PC.

Subgoal 2:

Variables: X VB Rest L ARest A1
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < IsA: case IsA.

Subgoal 2:

Variables: X VB Rest L ARest A1
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < IsB: case IsB.

Subgoal 2:

Variables: X VB Rest L ARest A1
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < apply IH to _ _ _ PC3 LS1.

Subgoal 2:

Variables: X VB Rest L ARest A1 VA
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
H1 : lookupScopes X ARest VA
H2 : projedVal VA VB
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < Or: apply lookup_string_value_list_or_no to IsA IsX.

Subgoal 2:

Variables: X VB Rest L ARest A1 VA
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
H1 : lookupScopes X ARest VA
H2 : projedVal VA VB
Or : (exists V, lookup A1 X V) \/ no_lookup A1 X
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < LA: case Or.

Subgoal 2.1:

Variables: X VB Rest L ARest A1 VA V
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
H1 : lookupScopes X ARest VA
H2 : projedVal VA VB
LA : lookup A1 X V
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < LB: apply PC1 to LA.

Subgoal 2.1:

Variables: X VB Rest L ARest A1 VA V VB1
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
H1 : lookupScopes X ARest VA
H2 : projedVal VA VB
LA : lookup A1 X V
LB : lookup L X VB1
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < apply no_lookup to LS LB.

Subgoal 2.2:

Variables: X VB Rest L ARest A1 VA
IH : forall A B X VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA,
         lookupScopes X A VA /\ projedVal VA VB
IsX : is_string X
LS : no_lookup L X
LS1 : lookupScopes X Rest VB *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
H1 : lookupScopes X ARest VA
H2 : projedVal VA VB
LA : no_lookup A1 X
============================
 exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
 < search.

Proof completed.
 < Theorem projedCtxs_lookupScopes :
     forall A B X VA VB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X A VA -> lookupScopes X B VB ->
       projedVal VA VB.

============================
 forall A B X VA VB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> lookupScopes X A VA -> lookupScopes X B VB ->
   projedVal VA VB
 < intros IsA IsB IsX PC LA LB.

Variables: A B X VA VB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
LA : lookupScopes X A VA
LB : lookupScopes X B VB
============================
 projedVal VA VB
 < LA': apply projedCtxs_lookupScopes_exists to _ _ _ PC LB.

Variables: A B X VA VB VA1
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
LA : lookupScopes X A VA
LB : lookupScopes X B VB
LA' : lookupScopes X A VA1
LA'1 : projedVal VA1 VB
============================
 projedVal VA VB
 < apply lookupScopes_unique to LA LA'.

Variables: A B X VB VA1
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
LA : lookupScopes X A VA1
LB : lookupScopes X B VB
LA' : lookupScopes X A VA1
LA'1 : projedVal VA1 VB
============================
 projedVal VA1 VB
 < search.

Proof completed.
 < Theorem projedCtxs_replaceScopes_exists :
     forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB.

============================
 forall A B X VA VB RB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB ->
   exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
 < induction on 6.

IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
============================
 forall A B X VA VB RB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB @ ->
   exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
 < intros IsA IsB IsX PC PV RB.

Variables: A B X VA VB RB
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
PV : projedVal VA VB
RB : replaceScopes X VB B RB @
============================
 exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
 < RB: case RB.

Subgoal 1:

Variables: A X VA VB I Rest LRemain L
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PC : projedCtxs A (L::Rest)
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
============================
 exists RA, replaceScopes X VA A RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < case IsB.

Subgoal 1:

Variables: A X VA VB I Rest LRemain L
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsX : is_string X
PC : projedCtxs A (L::Rest)
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists RA, replaceScopes X VA A RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < PC: case PC.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < LB: apply mem_lookup to _ RB.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < LA: apply PC to LB.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < MA: apply lookup_mem to LA.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < IsA: case IsA.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < RAA: apply remove_all_exists to IsA IsX.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 exists RA,
   replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
 < exists ((X, VA)::EE')::ARest.

Subgoal 1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 replaceScopes X VA (A1::ARest) (((X, VA)::EE')::ARest) /\
 projedCtxs (((X, VA)::EE')::ARest) (((X, VB)::LRemain)::Rest)
 < split.

Subgoal 1.1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 replaceScopes X VA (A1::ARest) (((X, VA)::EE')::ARest)
 < search.

Subgoal 1.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 projedCtxs (((X, VA)::EE')::ARest) (((X, VB)::LRemain)::Rest)
 < unfold .

Subgoal 1.2.1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 forall X1 VB1,
   lookup ((X, VB)::LRemain) X1 VB1 -> exists VA1, lookup ((X, VA)::EE') X1 VA1
 < intros LB'.

Subgoal 1.2.1:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : lookup ((X, VB)::LRemain) X1 VB1
============================
 exists VA1, lookup ((X, VA)::EE') X1 VA1
 < LB': case LB'.

Subgoal 1.2.1.1:

Variables: VA I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA VB1
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
============================
 exists VA1, lookup ((X1, VA)::EE') X1 VA1
 < search.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
============================
 exists VA1, lookup ((X, VA)::EE') X1 VA1
 < LB'': apply remove_all_lookup_other to RB1 LB'1 _.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LB'' : lookup L X1 VB1
============================
 exists VA1, lookup ((X, VA)::EE') X1 VA1
 < LA'': apply PC to LB''.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LB'' : lookup L X1 VB1
LA'' : lookup A1 X1 VA2
============================
 exists VA1, lookup ((X, VA)::EE') X1 VA1
 < LA': apply remove_all_lookup_other_back to RAA LA'' _.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LB'' : lookup L X1 VB1
LA'' : lookup A1 X1 VA2
LA' : lookup EE' X1 VA2
============================
 exists VA1, lookup ((X, VA)::EE') X1 VA1
 < search.

Subgoal 1.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 forall X1 VA1,
   lookup ((X, VA)::EE') X1 VA1 -> exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < intros LA'.

Subgoal 1.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : lookup ((X, VA)::EE') X1 VA2
============================
 exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < LA': case LA'.

Subgoal 1.2.2.1:

Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA2 VB
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
============================
 exists VB1, lookup ((X1, VB)::LRemain) X1 VB1
 < search.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
============================
 exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < LA'': apply remove_all_lookup_other to RAA LA'1 _.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LA'' : lookup A1 X1 VA2
============================
 exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < LB'': apply PC1 to LA''.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LA'' : lookup A1 X1 VA2
LB'' : lookup L X1 VB1
============================
 exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < LB': apply remove_all_lookup_other_back to RB1 LB'' _.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LA'' : lookup A1 X1 VA2
LB'' : lookup L X1 VB1
LB' : lookup LRemain X1 VB1
============================
 exists VB1, lookup ((X, VB)::LRemain) X1 VB1
 < search.

Subgoal 1.2.3:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 forall X1 VA1 VB1,
   lookup ((X, VA)::EE') X1 VA1 -> lookup ((X, VB)::LRemain) X1 VB1 -> projedVal VA1 VB1
 < intros LA' LB'.

Subgoal 1.2.3:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : lookup ((X, VA)::EE') X1 VA2
LB' : lookup ((X, VB)::LRemain) X1 VB1
============================
 projedVal VA2 VB1
 < LA': case LA'.

Subgoal 1.2.3.1:

Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA2 VB
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
LB' : lookup ((X1, VB)::LRemain) X1 VB1
============================
 projedVal VA2 VB1
 < LB': case LB'.

Subgoal 1.2.3.1.1:

Variables: I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA2 VB1
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
============================
 projedVal VA2 VB1
 < search.

Subgoal 1.2.3.1.2:

Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA2 VB
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
LB' : X1 = X1 -> false
LB'1 : lookup LRemain X1 VB1
============================
 projedVal VA2 VB1
 < apply LB' to _.

Subgoal 1.2.3.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LB' : lookup ((X, VB)::LRemain) X1 VB1
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
============================
 projedVal VA2 VB1
 < LB': case LB'.

Subgoal 1.2.3.2.1:

Variables: VA I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA VB1
RB : mem (X1, I) L
RB1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X1 V'
LA : lookup A1 X1 VA1
MA : mem (X1, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X1 EE'
LA' : X1 = X1 -> false
LA'1 : lookup EE' X1 VA2
============================
 projedVal VA2 VB1
 < apply LA' to _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
============================
 projedVal VA2 VB1
 < LA'': apply remove_all_lookup_other to RAA LA'1 _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LA'' : lookup A1 X1 VA2
============================
 projedVal VA2 VB1
 < LB'': apply remove_all_lookup_other to RB1 LB'1 _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LA'' : lookup A1 X1 VA2
LB'' : lookup L X1 VB1
============================
 projedVal VA2 VB1
 < apply PC2 to LA'' LB''.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
LA' : X = X1 -> false
LA'1 : lookup EE' X1 VA2
LB' : X = X1 -> false
LB'1 : lookup LRemain X1 VB1
LA'' : lookup A1 X1 VA2
LB'' : lookup L X1 VB1
H3 : projedVal VA2 VB1
============================
 projedVal VA2 VB1
 < search.

Subgoal 1.2.4:

Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE'
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : mem (X, I) L
RB1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
LB : lookup L X V'
LA : lookup A1 X VA1
MA : mem (X, VA1) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
RAA : remove_all A1 X EE'
============================
 projedCtxs ARest Rest
 < search.

Subgoal 2:

Variables: A X VA VB New L Rest
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PC : projedCtxs A (L::Rest)
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
============================
 exists RA, replaceScopes X VA A RA /\ projedCtxs RA (L::New)
 < PC: case PC.

Subgoal 2:

Variables: X VA VB New L Rest ARest A1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < IsA: case IsA.

Subgoal 2:

Variables: X VA VB New L Rest ARest A1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < IsB: case IsB.

Subgoal 2:

Variables: X VA VB New L Rest ARest A1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < RA: apply IH to _ _ _ PC3 _ RB1.

Subgoal 2:

Variables: X VA VB New L Rest ARest A1 RA
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
RA : replaceScopes X VA ARest RA
RA1 : projedCtxs RA New
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < Or: apply lookup_string_value_list_or_no to IsA IsX.

Subgoal 2:

Variables: X VA VB New L Rest ARest A1 RA
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
RA : replaceScopes X VA ARest RA
RA1 : projedCtxs RA New
Or : (exists V, lookup A1 X V) \/ no_lookup A1 X
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < LA: case Or.

Subgoal 2.1:

Variables: X VA VB New L Rest ARest A1 RA V
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
RA : replaceScopes X VA ARest RA
RA1 : projedCtxs RA New
LA : lookup A1 X V
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < LB: apply PC1 to LA.

Subgoal 2.1:

Variables: X VA VB New L Rest ARest A1 RA V VB1
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
RA : replaceScopes X VA ARest RA
RA1 : projedCtxs RA New
LA : lookup A1 X V
LB : lookup L X VB1
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < apply no_lookup to RB LB.

Subgoal 2.2:

Variables: X VA VB New L Rest ARest A1 RA
IH : forall A B X VA VB RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * ->
       exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RB : no_lookup L X
RB1 : replaceScopes X VB Rest New *
PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB
PC3 : projedCtxs ARest Rest
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) L
IsB1 : is_list (is_list (is_pair is_string is_value)) Rest
RA : replaceScopes X VA ARest RA
RA1 : projedCtxs RA New
LA : no_lookup A1 X
============================
 exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
 < search.

Proof completed.
 < Theorem projedCtxs_replaceScopes :
     forall A B X VA VB RA RB,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA ->
       replaceScopes X VB B RB -> projedCtxs RA RB.

============================
 forall A B X VA VB RA RB,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA ->
   replaceScopes X VB B RB -> projedCtxs RA RB
 < intros IsA IsB IsX PC PV RA RB.

Variables: A B X VA VB RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
PV : projedVal VA VB
RA : replaceScopes X VA A RA
RB : replaceScopes X VB B RB
============================
 projedCtxs RA RB
 < RA': apply projedCtxs_replaceScopes_exists to _ _ _ PC PV RB.

Variables: A B X VA VB RA RB RA1
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
PV : projedVal VA VB
RA : replaceScopes X VA A RA
RB : replaceScopes X VB B RB
RA' : replaceScopes X VA A RA1
RA'1 : projedCtxs RA1 RB
============================
 projedCtxs RA RB
 < apply replaceScopes_unique to RA RA'.

Variables: A B X VA VB RB RA1
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
PV : projedVal VA VB
RA : replaceScopes X VA A RA1
RB : replaceScopes X VB B RB
RA' : replaceScopes X VA A RA1
RA'1 : projedCtxs RA1 RB
============================
 projedCtxs RA1 RB
 < search.

Proof completed.
 < Theorem scopes_same_projedCtxs :
     forall A B C, scopes_same A B -> projedCtxs B C -> projedCtxs A C.

============================
 forall A B C, scopes_same A B -> projedCtxs B C -> projedCtxs A C
 < induction on 1.

IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
============================
 forall A B C, scopes_same A B @ -> projedCtxs B C -> projedCtxs A C
 < intros SS PC.

Variables: A B C
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : scopes_same A B @
PC : projedCtxs B C
============================
 projedCtxs A C
 < SS: case SS.

Subgoal 1:

Variables: C
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
PC : projedCtxs [] C
============================
 projedCtxs [] C
 < case PC.

Subgoal 1:

IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
============================
 projedCtxs [] []
 < search.

Subgoal 2:

Variables: C BRest B1 ARest A1
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
PC : projedCtxs (B1::BRest) C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
============================
 projedCtxs (A1::ARest) C
 < PC: case PC.

Subgoal 2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
============================
 projedCtxs (A1::ARest) (B2::BRest1)
 < unfold .

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
============================
 forall X VB, lookup B2 X VB -> exists VA, lookup A1 X VA
 < intros LB2.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LB2 : lookup B2 X VB
============================
 exists VA, lookup A1 X VA
 < LB1: apply PC to LB2.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB VA
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LB2 : lookup B2 X VB
LB1 : lookup B1 X VA
============================
 exists VA, lookup A1 X VA
 < apply SS1 to LB1.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB VA
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LB2 : lookup B2 X VB
LB1 : lookup B1 X VA
H1 : lookup A1 X VA
============================
 exists VA, lookup A1 X VA
 < search.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
============================
 forall X VA, lookup A1 X VA -> exists VB, lookup B2 X VB
 < intros LA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
============================
 exists VB, lookup B2 X VB
 < LB1: apply SS to LA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
LB1 : lookup B1 X VA
============================
 exists VB, lookup B2 X VB
 < apply PC1 to LB1.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
LB1 : lookup B1 X VA
H1 : lookup B2 X VB
============================
 exists VB, lookup B2 X VB
 < search.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
============================
 forall X VA VB, lookup A1 X VA -> lookup B2 X VB -> projedVal VA VB
 < intros LA LB2.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
============================
 projedVal VA VB
 < LB1: apply SS to LA.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
LB1 : lookup B1 X VA
============================
 projedVal VA VB
 < apply PC2 to LB1 LB2.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
LB1 : lookup B1 X VA
H1 : projedVal VA VB
============================
 projedVal VA VB
 < search.

Subgoal 2.4:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
============================
 projedCtxs ARest BRest1
 < apply IH to SS2 PC3.

Subgoal 2.4:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C
SS : forall X V, lookup A1 X V -> lookup B1 X V
SS1 : forall X V, lookup B1 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest *
PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA
PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB
PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB
PC3 : projedCtxs BRest BRest1
H1 : projedCtxs ARest BRest1
============================
 projedCtxs ARest BRest1
 < search.

Proof completed.
 < Theorem projedCtxs_scopes_same :
     forall A B C, projedCtxs A B -> scopes_same B C -> projedCtxs A C.

============================
 forall A B C, projedCtxs A B -> scopes_same B C -> projedCtxs A C
 < induction on 1.

IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
============================
 forall A B C, projedCtxs A B @ -> scopes_same B C -> projedCtxs A C
 < intros PC SS.

Variables: A B C
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : projedCtxs A B @
SS : scopes_same B C
============================
 projedCtxs A C
 < PC: case PC.

Subgoal 1:

Variables: C
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
SS : scopes_same [] C
============================
 projedCtxs [] C
 < case SS.

Subgoal 1:

IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
============================
 projedCtxs [] []
 < search.

Subgoal 2:

Variables: C BRest B1 ARest A1
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
SS : scopes_same (B1::BRest) C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
============================
 projedCtxs (A1::ARest) C
 < SS: case SS.

Subgoal 2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
============================
 projedCtxs (A1::ARest) (B2::BRest1)
 < unfold .

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
============================
 forall X VB, lookup B2 X VB -> exists VA, lookup A1 X VA
 < intros LB2.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LB2 : lookup B2 X VB
============================
 exists VA, lookup A1 X VA
 < LB1: apply SS1 to LB2.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LB2 : lookup B2 X VB
LB1 : lookup B1 X VB
============================
 exists VA, lookup A1 X VA
 < apply PC to LB1.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X VB VA
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LB2 : lookup B2 X VB
LB1 : lookup B1 X VB
H1 : lookup A1 X VA
============================
 exists VA, lookup A1 X VA
 < search.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
============================
 forall X VA, lookup A1 X VA -> exists VB, lookup B2 X VB
 < intros LA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
============================
 exists VB, lookup B2 X VB
 < LB1: apply PC1 to LA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
LB1 : lookup B1 X VB
============================
 exists VB, lookup B2 X VB
 < apply SS to LB1.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
LB1 : lookup B1 X VB
H1 : lookup B2 X VB
============================
 exists VB, lookup B2 X VB
 < search.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
============================
 forall X VA VB, lookup A1 X VA -> lookup B2 X VB -> projedVal VA VB
 < intros LA LB2.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
============================
 projedVal VA VB
 < LB1: apply SS1 to LB2.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
LB1 : lookup B1 X VB
============================
 projedVal VA VB
 < apply PC2 to LA LB1.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2 X VA VB
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
LA : lookup A1 X VA
LB2 : lookup B2 X VB
LB1 : lookup B1 X VB
H1 : projedVal VA VB
============================
 projedVal VA VB
 < search.

Subgoal 2.4:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
============================
 projedCtxs ARest BRest1
 < apply IH to PC3 SS2.

Subgoal 2.4:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C
PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA
PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs ARest BRest *
SS : forall X V, lookup B1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup B1 X V
SS2 : scopes_same BRest BRest1
H1 : projedCtxs ARest BRest1
============================
 projedCtxs ARest BRest1
 < search.

Proof completed.
 < Define projedArgs : (list value) -> (list value) -> prop by
   projedArgs [] [];
   projedArgs (VA::ARest) (VB::BRest) :=
     projedVal VA VB /\ projedArgs ARest BRest.


 < Theorem zip_projedArgs :
     forall N VA VB ZA ZB,
       projedArgs VA VB -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB].

============================
 forall N VA VB ZA ZB,
   projedArgs VA VB -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
 < induction on 1.

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 forall N VA VB ZA ZB,
   projedArgs VA VB @ -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
 < intros PA ZA ZB.

Variables: N VA VB ZA ZB
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedArgs VA VB @
ZA : zip N VA ZA
ZB : zip N VB ZB
============================
 projedCtxs [ZA] [ZB]
 < PA: case PA.

Subgoal 1:

Variables: N ZA ZB
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
ZA : zip N [] ZA
ZB : zip N [] ZB
============================
 projedCtxs [ZA] [ZB]
 < case ZA.

Subgoal 1:

Variables: ZB
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
ZB : zip [] [] ZB
============================
 projedCtxs [[]] [ZB]
 < case ZB.

Subgoal 1:

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 projedCtxs [[]] [[]]
 < unfold .

Subgoal 1.1:

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
 < intros L.

Subgoal 1.1:

Variables: X VB1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
L : lookup [] X VB1
============================
 exists VA, lookup [] X VA
 < case L.

Subgoal 1.2:

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
 < intros L.

Subgoal 1.2:

Variables: X VA1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
L : lookup [] X VA1
============================
 exists VB, lookup [] X VB
 < case L.

Subgoal 1.3:

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
 < intros L.

Subgoal 1.3:

Variables: X VA1 VB1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
L : lookup [] X VA1
H1 : lookup [] X VB1
============================
 projedVal VA1 VB1
 < case L.

Subgoal 1.4:

IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
============================
 projedCtxs [] []
 < search.

Subgoal 2:

Variables: N ZA ZB BRest VB1 ARest VA1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
ZA : zip N (VA1::ARest) ZA
ZB : zip N (VB1::BRest) ZB
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
============================
 projedCtxs [ZA] [ZB]
 < ZA: case ZA.

Subgoal 2:

Variables: ZB BRest VB1 ARest VA1 Rest A ARest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
ZB : zip (A::ARest1) (VB1::BRest) ZB
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
============================
 projedCtxs [(A, VA1)::Rest] [ZB]
 < ZB: case ZB.

Subgoal 2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
============================
 projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
 < PC: apply IH to PA1 ZA ZB.

Subgoal 2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : projedCtxs [Rest] [Rest1]
============================
 projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
 < PC: case PC.

Subgoal 2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
 < unfold .

Subgoal 2.1:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 forall X VB,
   lookup ((A, VB1)::Rest1) X VB -> exists VA, lookup ((A, VA1)::Rest) X VA
 < intros LB.

Subgoal 2.1:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : lookup ((A, VB1)::Rest1) X VB2
============================
 exists VA, lookup ((A, VA1)::Rest) X VA
 < LB: case LB.

Subgoal 2.1.1:

Variables: BRest ARest VA1 Rest ARest1 Rest1 X VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB2
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 exists VA, lookup ((X, VA1)::Rest) X VA
 < search.

Subgoal 2.1.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : A = X -> false
LB1 : lookup Rest1 X VB2
============================
 exists VA, lookup ((A, VA1)::Rest) X VA
 < apply PC to LB1.

Subgoal 2.1.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2 VA2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : A = X -> false
LB1 : lookup Rest1 X VB2
H1 : lookup Rest X VA2
============================
 exists VA, lookup ((A, VA1)::Rest) X VA
 < search.

Subgoal 2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 forall X VA,
   lookup ((A, VA1)::Rest) X VA -> exists VB, lookup ((A, VB1)::Rest1) X VB
 < intros LA.

Subgoal 2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : lookup ((A, VA1)::Rest) X VA2
============================
 exists VB, lookup ((A, VB1)::Rest1) X VB
 < LA: case LA.

Subgoal 2.2.1:

Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA2 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 exists VB, lookup ((X, VB1)::Rest1) X VB
 < search.

Subgoal 2.2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : A = X -> false
LA1 : lookup Rest X VA2
============================
 exists VB, lookup ((A, VB1)::Rest1) X VB
 < apply PC1 to LA1.

Subgoal 2.2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : A = X -> false
LA1 : lookup Rest X VA2
H1 : lookup Rest1 X VB2
============================
 exists VB, lookup ((A, VB1)::Rest1) X VB
 < search.

Subgoal 2.3:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 forall X VA VB,
   lookup ((A, VA1)::Rest) X VA -> lookup ((A, VB1)::Rest1) X VB -> projedVal VA VB
 < intros LA LB.

Subgoal 2.3:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : lookup ((A, VA1)::Rest) X VA2
LB : lookup ((A, VB1)::Rest1) X VB2
============================
 projedVal VA2 VB2
 < LA: case LA.

Subgoal 2.3.1:

Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA2 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : lookup ((X, VB1)::Rest1) X VB2
============================
 projedVal VA2 VB2
 < LB: case LB.

Subgoal 2.3.1.1:

Variables: BRest ARest Rest ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA2 VB2
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 projedVal VA2 VB2
 < search.

Subgoal 2.3.1.2:

Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA2 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : X = X -> false
LB1 : lookup Rest1 X VB2
============================
 projedVal VA2 VB2
 < apply LB to _.

Subgoal 2.3.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LB : lookup ((A, VB1)::Rest1) X VB2
LA : A = X -> false
LA1 : lookup Rest X VA2
============================
 projedVal VA2 VB2
 < LB: case LB.

Subgoal 2.3.2.1:

Variables: BRest ARest VA1 Rest ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB2
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : X = X -> false
LA1 : lookup Rest X VA2
============================
 projedVal VA2 VB2
 < apply LA to _.

Subgoal 2.3.2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : A = X -> false
LA1 : lookup Rest X VA2
LB : A = X -> false
LB1 : lookup Rest1 X VB2
============================
 projedVal VA2 VB2
 < apply PC2 to LA1 LB1.

Subgoal 2.3.2.2:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
LA : A = X -> false
LA1 : lookup Rest X VA2
LB : A = X -> false
LB1 : lookup Rest1 X VB2
H1 : projedVal VA2 VB2
============================
 projedVal VA2 VB2
 < search.

Subgoal 2.4:

Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1
IH : forall N VA VB ZA ZB,
       projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
PA : projedVal VA1 VB1
PA1 : projedArgs ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA
PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB
PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB
PC3 : projedCtxs [] []
============================
 projedCtxs [] []
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalExpr_same : forall E T EE EE_T FE FE_T V V_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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transE E T ->
         Ev : evalExpr FE EE E V O ->
         EvT : evalExpr FE_T EE_T T V_T O_T ->
         projedVal V V_T /\
         O = O_T
      on Ev as IH_E,
      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 ->
         PC : projedCtxs (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 ->
         PC : projedCtxs (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 ->
         projedCtxs EE' EE_T'
      on Ev as IH_S_C,
      trans_evalArgs_same : forall A T EE EE_T FE FE_T V V_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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transA A T ->
         Ev : evalArgs FE EE A V O ->
         EvT : evalArgs FE_T EE_T T V_T O_T ->
         projedArgs V V_T /\
         O = O_T
      on Ev as IH_A,
      trans_evalRecFields_same : forall RF T EE EE_T FE FE_T V V_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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transRF RF T ->
         Ev : evalRecFields FE EE RF V O ->
         EvT : evalRecFields FE_T EE_T T V_T O_T ->
         projedFields V V_T /\
         O = O_T
      on Ev as IH_RF.

Subgoal 1:

Variables: E T EE EE_T FE FE_T V V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE E T
Ev : evalExpr FE EE E V O
EvT : evalExpr FE_T EE_T T V_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: 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
PC : projedCtxs (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 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
PC : projedCtxs (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: A T EE EE_T FE FE_T V V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA A T
Ev : evalArgs FE EE A V O
EvT : evalArgs FE_T EE_T T V_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 5:

Variables: RF T EE EE_T FE FE_T V V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF RF T
Ev : evalRecFields FE EE RF V O
EvT : evalRecFields FE_T EE_T T V_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 6.1.1:

Variables: T EE EE_T FE FE_T V_T O_T I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (num I) T
Ev : evalExpr FE EE (num I) (intVal I) [] @
EvT : evalExpr FE_T EE_T T V_T O_T
============================
 projedVal (intVal I) V_T /\ [] = O_T
 < case Trans.

Subgoal 6.1.1:

Variables: EE EE_T FE FE_T V_T O_T I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (num I) (intVal I) [] @
EvT : evalExpr FE_T EE_T (num I) V_T O_T
============================
 projedVal (intVal I) V_T /\ [] = O_T
 < case EvT.

Subgoal 6.1.1:

Variables: EE EE_T FE FE_T I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (num I) (intVal I) [] @
============================
 projedVal (intVal I) (intVal I) /\ [] = []
 < search.

Subgoal 6.1.2:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
============================
 projedVal (intVal I) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.2:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal (intVal I) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T (plus E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal (intVal I) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M1 Ev3.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I5
EvT4 : I1 + I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M2 Ev4.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 + I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply plus_integer_unique to Ev5 EvT4.

Subgoal 6.1.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I3) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I3
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 + I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I3) (intVal I3) /\ O_T = O_T
 < search.

Subgoal 6.1.3:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
============================
 projedVal (intVal I) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.3:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal (intVal I) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T (minus E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal (intVal I) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M1 Ev3.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I5
EvT4 : I1 - I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M2 Ev4.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 - I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply minus_integer_unique to Ev5 EvT4.

Subgoal 6.1.3:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I3) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I3
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 - I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I3) (intVal I3) /\ O_T = O_T
 < search.

Subgoal 6.1.4:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
============================
 projedVal (intVal I) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.4:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal (intVal I) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T (mult E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal (intVal I) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M1 Ev3.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I5
EvT4 : I1 * I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M2 Ev4.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 * I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply multiply_integer_unique to Ev5 EvT4.

Subgoal 6.1.4:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I3) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I3
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 * I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I3) (intVal I3) /\ O_T = O_T
 < search.

Subgoal 6.1.5:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
============================
 projedVal (intVal I) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.5:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal (intVal I) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
EvT : evalExpr FE_T EE_T (div E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal (intVal I) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I4
EvT3 : matchInt V4 I5
EvT4 : I4 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I4
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M1 Ev3.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I5
EvT4 : I1 / I5 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I5
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply matchInt_unique to _ M2 Ev4.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 / I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I) (intVal I3) /\ O_T = O_T
 < apply divide_integer_unique to Ev5 EvT4.

Subgoal 6.1.5:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I3) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I3
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 / I2 = I3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
Pr2 : projedVal V2 V4
H4 : is_value V1
H5 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal (intVal I3) (intVal I3) /\ O_T = O_T
 < search.

Subgoal 6.1.6:

Variables: T EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE true T
Ev : evalExpr FE EE true trueVal [] @
EvT : evalExpr FE_T EE_T T V_T O_T
============================
 projedVal trueVal V_T /\ [] = O_T
 < case Trans.

Subgoal 6.1.6:

Variables: EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE true trueVal [] @
EvT : evalExpr FE_T EE_T true V_T O_T
============================
 projedVal trueVal V_T /\ [] = O_T
 < case EvT.

Subgoal 6.1.6:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE true trueVal [] @
============================
 projedVal trueVal trueVal /\ [] = []
 < search.

Subgoal 6.1.7:

Variables: T EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE false T
Ev : evalExpr FE EE false falseVal [] @
EvT : evalExpr FE_T EE_T T V_T O_T
============================
 projedVal falseVal V_T /\ [] = O_T
 < case Trans.

Subgoal 6.1.7:

Variables: EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE false falseVal [] @
EvT : evalExpr FE_T EE_T false V_T O_T
============================
 projedVal falseVal V_T /\ [] = O_T
 < case EvT.

Subgoal 6.1.7:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE false falseVal [] @
============================
 projedVal falseVal falseVal /\ [] = []
 < search.

Subgoal 6.1.8:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.8:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.8:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.8.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.8.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.8.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.8.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
H4 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.8.1:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
H3 : is_expr E11
H4 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.8.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.8.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.8.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.1.8.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
H3 : is_value V1
M : matchFalse V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.8.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.8.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 6.1.8.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT3.

Subgoal 6.1.8.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
M : matchFalse V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.9:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.9:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.9:

Variables: EE EE_T FE FE_T V_T O O_T V1 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.9.1:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.9.1:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
============================
 projedVal falseVal trueVal /\ O2 = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.9.1:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O2 = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.1.9.1:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
M : matchTrue V1
============================
 projedVal falseVal trueVal /\ O2 = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.9.2:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O_T
EvT1 : matchFalse V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.9.2:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O_T
EvT1 : matchFalse V2
Pr : projedVal V1 V2
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.9.3:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.9.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
============================
 projedVal falseVal falseVal /\ O2 = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.9.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O2 = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.1.9.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchTrue V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
M : matchTrue V1
============================
 projedVal falseVal falseVal /\ O2 = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.10:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.10:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.10:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.10.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.1.10.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : is_expr E11
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.10.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : is_expr E11
Pr : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 6.1.10.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : is_expr E11
Pr : projedVal V2 V4
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT3.

Subgoal 6.1.10.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : is_expr E11
Pr : projedVal V2 V4
H4 : is_value V2
M : matchTrue V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.10.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.10.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.10.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.1.10.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchFalse V3
Pr : projedVal V1 V3
H3 : is_value V1
M : matchFalse V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.10.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.10.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.10.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.10.3:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchTrue V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.11:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.11:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.11:

Variables: EE EE_T FE FE_T V_T O O_T V1 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.11.1:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O_T
EvT1 : matchTrue V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.11.1:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O_T
EvT1 : matchTrue V2
H3 : projedVal V1 V2
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.11.2:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.11.2:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
============================
 projedVal trueVal trueVal /\ O2 = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.11.2:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O2 = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.1.11.2:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchTrue V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
M : matchFalse V1
============================
 projedVal trueVal trueVal /\ O2 = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.11.3:

Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.11.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
============================
 projedVal trueVal falseVal /\ O2 = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.11.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O2 = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.1.11.3:

Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O2 @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V2 O2
EvT1 : matchFalse V2
EvT2 : evalExpr FE_T EE_T E21 V3 O3
EvT3 : matchFalse V3
EvT4 : O2 ++ O3 = O_T
Pr : projedVal V1 V2
H3 : is_value V1
M : matchFalse V1
============================
 projedVal trueVal falseVal /\ O2 = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.12:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.12:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.12:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.12.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.12.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.12.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.1.12.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
H3 : is_value V1
M : matchTrue V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.12.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.12.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.12.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.12.2:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.12.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.12.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 6.1.12.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT3.

Subgoal 6.1.12.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
M : matchFalse V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.13:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.13:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.13:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.13.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.13.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.13.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.1.13.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O_T ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O_T
EvT1 : matchTrue V3
Pr : projedVal V1 V3
H3 : is_value V1
M : matchTrue V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.13.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.13.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 6.1.13.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT3.

Subgoal 6.1.13.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr : projedVal V2 V4
H3 : is_value V2
M : matchTrue V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.13.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.13.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.1.13.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.13.3:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O4 *
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : matchFalse V3
EvT2 : evalExpr FE_T EE_T E21 V4 O4
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
H3 : projedVal V1 V3
H4 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.14:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.14:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.14:

Variables: EE EE_T FE FE_T V_T O O_T V1 E1 E3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
EvT : evalExpr FE_T EE_T (not E3) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.14.1:

Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.14.1:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
H2 : projedVal V1 V2
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.14.2:

Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.14.2:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
Pr : projedVal V1 V2
============================
 projedVal trueVal falseVal /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.14.2:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
Pr : projedVal V1 V2
H2 : is_value V1
============================
 projedVal trueVal falseVal /\ O_T = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.1.14.2:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
Pr : projedVal V1 V2
H2 : is_value V1
M : matchTrue V1
============================
 projedVal trueVal falseVal /\ O_T = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.15:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.15:

Variables: T EE EE_T FE FE_T V_T O O_T V1 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.15:

Variables: EE EE_T FE FE_T V_T O O_T V1 E1 E3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
EvT : evalExpr FE_T EE_T (not E3) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.15.1:

Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.15.1:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
Pr : projedVal V1 V2
============================
 projedVal falseVal trueVal /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.15.1:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
Pr : projedVal V1 V2
H2 : is_value V1
============================
 projedVal falseVal trueVal /\ O_T = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.1.15.1:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchFalse V2
Pr : projedVal V1 V2
H2 : is_value V1
M : matchFalse V1
============================
 projedVal falseVal trueVal /\ O_T = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.15.2:

Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.15.2:

Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O_T *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvT : evalExpr FE_T EE_T E3 V2 O_T
EvT1 : matchTrue V2
H2 : projedVal V1 V2
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.16:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.16:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.16:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
============================
 projedVal trueVal trueVal /\ O = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.16.1:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
============================
 projedVal trueVal falseVal /\ O = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_unique to _ Ev3 M1.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I2
Ev5 : I3 > I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_unique to _ Ev4 M2.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I4
Ev5 : I3 > I4
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal trueVal falseVal /\ O = O_T
 < L: case Ev5.

Subgoal 6.1.16.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I4
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
L : I4 < I3
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply less_lesseq_flip_false to L EvT4.

Subgoal 6.1.17:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.17:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.17:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
============================
 projedVal falseVal trueVal /\ O = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_unique to _ Ev3 M1.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I2
Ev5 : I3 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_unique to _ Ev4 M2.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I4
Ev5 : I3 <= I4
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 > I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
============================
 projedVal falseVal trueVal /\ O = O_T
 < L: case EvT4.

Subgoal 6.1.17.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I3
Ev4 : matchInt V2 I4
Ev5 : I3 <= I4
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I3
M2 : matchInt V2 I4
L : I4 < I3
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply less_lesseq_flip_false to L Ev5.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.17.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 <= I4
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.18:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.18:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.18:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.18.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I1
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.18.1:

Variables: EE EE_T FE FE_T O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I1
============================
 projedVal trueVal falseVal /\ O = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_unique to _ Ev3 M1.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I1
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I1
M2 : matchInt V2 I2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_unique to _ Ev4 M2.

Subgoal 6.1.18.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I2
Ev4 : matchInt V2 I2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I2
EvT3 : matchInt V4 I2
EvT4 : I2 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I2
M2 : matchInt V2 I2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply EvT4 to _.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.18.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ _ M.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.18.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ _ M.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.18.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ _ M.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.18.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ _ M.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.18.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ _ M.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.18.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ _ M.

Subgoal 6.1.19:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.19:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.19:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M1: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < M2: apply projedVal_matchInt to Pr2 _ EvT3.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I
M2 : matchInt V2 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_unique to _ Ev3 M1.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I2
Ev5 : I = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I
M2 : matchInt V2 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_unique to _ Ev4 M2.

Subgoal 6.1.19.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : I = I -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V1 I
M2 : matchInt V2 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply Ev5 to _.

Subgoal 6.1.19.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 = I4 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 = I4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 = I4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.19.2:

Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I3
EvT3 : matchInt V4 I4
EvT4 : I3 = I4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.19.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ _ M.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.19.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ _ M.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.19.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ _ M.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.19.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ _ M.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.19.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ _ M.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal falseVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.19.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S1
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ _ M.

Subgoal 6.1.20:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.20:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.20:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal trueVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.20.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ M _.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.20.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ M _.

Subgoal 6.1.20.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.20.3:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.20.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.20.4:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr2 _ EvT3.

Subgoal 6.1.20.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.20.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.20.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.20.7:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.20.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_matchTrue_exclusive to _ M _.

Subgoal 6.1.21:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.21:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.21:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.21.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.21.1:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.21.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ M _.

Subgoal 6.1.21.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.21.3:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.21.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.21.4:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.21.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr2 _ EvT3.

Subgoal 6.1.21.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.21.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.21.7:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.21.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_matchFalse_exclusive to _ M _.

Subgoal 6.1.22:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.22:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.22:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.22.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchTrue_exclusive to _ M _.

Subgoal 6.1.22.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT5.

Subgoal 6.1.22.2:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr2 _ EvT3.

Subgoal 6.1.22.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.22.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.22.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.22.5:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.22.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.22.6:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.22.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_matchTrue_exclusive to _ M _.

Subgoal 6.1.22.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.22.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.22.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT5.

Subgoal 6.1.22.8:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.23:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.23:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.23:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.23.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchFalse_exclusive to _ M _.

Subgoal 6.1.23.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT5.

Subgoal 6.1.23.2:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.23.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr2 _ EvT3.

Subgoal 6.1.23.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.1.23.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.23.5:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.23.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.23.6:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.23.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchString V1 S
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_matchFalse_exclusive to _ M _.

Subgoal 6.1.23.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.23.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.23.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev5 EvT5.

Subgoal 6.1.23.8:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.24:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
============================
 projedVal trueVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.24:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal trueVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.24:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal trueVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.24.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.24.1:

Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.24.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ M _.

Subgoal 6.1.24.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.24.3:

Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.24.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.24.4:

Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.24.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_matchTrue_exclusive to _ _ M.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.24.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_matchFalse_exclusive to _ _ M.

Subgoal 6.1.24.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S1
EvT4 : O1 ++ O4 = O_T
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.24.7:

Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal trueVal /\ O_T = O_T
 < search.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal trueVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal trueVal falseVal /\ O = O_T
 < M1: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S1
============================
 projedVal trueVal falseVal /\ O = O_T
 < M2: apply projedVal_matchString to Pr2 _ EvT3.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S2
EvT4 : S1 = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S1
M2 : matchString V2 S2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_unique to _ M1 Ev3.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S2
EvT4 : S = S2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S
M2 : matchString V2 S2
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply matchString_unique to _ M2 Ev4.

Subgoal 6.1.24.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : S = S -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S
M2 : matchString V2 S
============================
 projedVal trueVal falseVal /\ O = O_T
 < apply EvT4 to _.

Subgoal 6.1.25:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
============================
 projedVal falseVal V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.25:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal falseVal V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.25:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal falseVal V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchInt to Pr1 _ EvT2.

Subgoal 6.1.25.1:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I
EvT3 : matchInt V4 I
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchInt V1 I
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchInt_matchString_exclusive to _ M _.

Subgoal 6.1.25.2:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.2:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.25.2:

Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchInt V3 I1
EvT3 : matchInt V4 I2
EvT4 : I1 = I2 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchTrue to Pr1 _ EvT2.

Subgoal 6.1.25.3:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchTrue V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_matchTrue_exclusive to _ _ M.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M: apply projedVal_matchFalse to Pr1 _ EvT2.

Subgoal 6.1.25.4:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M : matchFalse V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_matchFalse_exclusive to _ _ M.

Subgoal 6.1.25.5:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.5:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT4.

Subgoal 6.1.25.5:

Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchTrue V3
EvT3 : matchFalse V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.25.6:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.6:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT4.

Subgoal 6.1.25.6:

Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchFalse V3
EvT3 : matchTrue V4
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal trueVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal falseVal trueVal /\ O = O_T
 < M1: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S
============================
 projedVal falseVal trueVal /\ O = O_T
 < M2: apply projedVal_matchString to Pr2 _ EvT3.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S
EvT3 : matchString V4 S
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S
M2 : matchString V2 S
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_unique to _ M1 Ev3.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S1
EvT3 : matchString V4 S1
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S1
M2 : matchString V2 S1
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply matchString_unique to _ M2 Ev4.

Subgoal 6.1.25.7:

Variables: EE EE_T FE FE_T O O_T V1 V2 S2 E2 E1 E21 E11 V3 O1 V4 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S2
Ev4 : matchString V2 S2
Ev5 : S2 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S2
EvT3 : matchString V4 S2
EvT4 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S2
M2 : matchString V2 S2
============================
 projedVal falseVal trueVal /\ O = O_T
 < apply Ev5 to _.

Subgoal 6.1.25.8:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S3
EvT3 : matchString V4 S4
EvT4 : S3 = S4 -> false
EvT5 : O1 ++ O4 = O_T
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.25.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S3
EvT3 : matchString V4 S4
EvT4 : S3 = S4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal falseVal falseVal /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.25.8:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S3
EvT3 : matchString V4 S4
EvT4 : S3 = S4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.25.8:

Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S3
EvT3 : matchString V4 S4
EvT4 : S3 = S4 -> false
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal falseVal falseVal /\ O_T = O_T
 < search.

Subgoal 6.1.26:

Variables: T EE EE_T FE FE_T V_T O_T S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (stringLit S) T
Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @
EvT : evalExpr FE_T EE_T T V_T O_T
============================
 projedVal (stringVal S) V_T /\ [] = O_T
 < case Trans.

Subgoal 6.1.26:

Variables: EE EE_T FE FE_T V_T O_T S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @
EvT : evalExpr FE_T EE_T (stringLit S) V_T O_T
============================
 projedVal (stringVal S) V_T /\ [] = O_T
 < case EvT.

Subgoal 6.1.26:

Variables: EE EE_T FE FE_T S
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @
============================
 projedVal (stringVal S) (stringVal S) /\ [] = []
 < search.

Subgoal 6.1.27:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
============================
 projedVal (stringVal S) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.27:

Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 projedVal (stringVal S) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
EvT : evalExpr FE_T EE_T (appString E11 E21) V_T O_T
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 projedVal (stringVal S) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < M1: apply projedVal_matchString to Pr1 _ EvT2.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < M2: apply projedVal_matchString to Pr2 _ EvT3.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
M2 : matchString V2 S5
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < apply matchString_unique to _ Ev3 M1.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S4
Ev4 : matchString V2 S2
Ev5 : S4 ++ S2 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
M2 : matchString V2 S5
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < apply matchString_unique to _ Ev4 M2.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S4
Ev4 : matchString V2 S5
Ev5 : S4 ++ S5 = S
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
M2 : matchString V2 S5
============================
 projedVal (stringVal S) (stringVal S3) /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) O @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S4
Ev4 : matchString V2 S5
Ev5 : S4 ++ S5 = S3
Ev6 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
M2 : matchString V2 S5
============================
 projedVal (stringVal S3) (stringVal S3) /\ O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.1.27:

Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) O_T @
Ev1 : evalExpr FE EE E1 V1 O1 *
Ev2 : evalExpr FE EE E2 V2 O4 *
Ev3 : matchString V1 S4
Ev4 : matchString V2 S5
Ev5 : S4 ++ S5 = S3
Ev6 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvT : evalExpr FE_T EE_T E11 V3 O1
EvT1 : evalExpr FE_T EE_T E21 V4 O4
EvT2 : matchString V3 S4
EvT3 : matchString V4 S5
EvT4 : S4 ++ S5 = S3
EvT5 : O1 ++ O4 = O_T
Pr1 : projedVal V1 V3
Pr2 : projedVal V2 V4
H3 : is_value V1
H4 : is_value V2
M1 : matchString V1 S4
M2 : matchString V2 S5
============================
 projedVal (stringVal S3) (stringVal S3) /\ O_T = O_T
 < search.

Subgoal 6.1.28:

Variables: T EE EE_T FE FE_T V V_T O_T X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (name X) T
Ev : evalExpr FE EE (name X) V [] @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : lookupScopes X EE V
============================
 projedVal V V_T /\ [] = O_T
 < case IsE.

Subgoal 6.1.28:

Variables: T EE EE_T FE FE_T V V_T O_T X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (name X) T
Ev : evalExpr FE EE (name X) V [] @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : lookupScopes X EE V
H1 : is_string X
============================
 projedVal V V_T /\ [] = O_T
 < case Trans.

Subgoal 6.1.28:

Variables: EE EE_T FE FE_T V V_T O_T X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (name X) V [] @
EvT : evalExpr FE_T EE_T (name X) V_T O_T
Ev1 : lookupScopes X EE V
H1 : is_string X
============================
 projedVal V V_T /\ [] = O_T
 < EvT: case EvT.

Subgoal 6.1.28:

Variables: EE EE_T FE FE_T V V_T X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
H1 : is_string X
EvT : lookupScopes X EE_T V_T
============================
 projedVal V V_T /\ [] = []
 < apply projedCtxs_lookupScopes to _ _ _ PC Ev1 EvT.

Subgoal 6.1.28:

Variables: EE EE_T FE FE_T V V_T X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
H1 : is_string X
EvT : lookupScopes X EE_T V_T
H2 : projedVal V V_T
============================
 projedVal V V_T /\ [] = []
 < search.

Subgoal 6.1.29:

Variables: T EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
============================
 projedVal V V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.29:

Variables: T EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
============================
 projedVal V V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
EvT : evalExpr FE_T EE_T (call Fun A1) V_T O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
============================
 projedVal V V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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
============================
 projedVal V V_T /\ O = O_T
 < R: case RFE (keep).

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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
============================
 projedVal V V_T /\ O = O_T
 < L_T: apply R to Ev1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
============================
 projedVal V V_T /\ O = O_T
 < apply lookup_unique to EvT L_T.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
============================
 projedVal V V_T /\ O = O_T
 < clear L_T
   R
   R1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
============================
 projedVal V V_T /\ O = O_T
 < apply IH_A to _ _ _ _ _ _ _ Trans Ev2 EvT1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
============================
 projedVal V V_T /\ O = O_T
 < apply evalArgs_isValue to _ _ _ Ev2.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
============================
 projedVal V V_T /\ O = O_T
 < apply transA_is to _ Trans.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
============================
 projedVal V V_T /\ O = O_T
 < apply evalArgs_isValue to _ _ _ EvT1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
============================
 projedVal V V_T /\ O = O_T
 < IsP: apply lookup_is_value_funCtx to _ Ev1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : 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)))
============================
 projedVal V V_T /\ O = O_T
 < IsP: case IsP.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : 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))
============================
 projedVal V V_T /\ O = O_T
 < IsP: case IsP1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 projedVal V V_T /\ O = O_T
 < IsP: case IsP2.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
============================
 projedVal V V_T /\ O = O_T
 < Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1).

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
============================
 projedVal V V_T /\ O = O_T
 < Z': assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv).

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
============================
 projedVal V V_T /\ O = O_T
 < apply zip_ctx_names to Z.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
============================
 projedVal V V_T /\ O = O_T
 < apply zip_ctx_names to Z'.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
============================
 projedVal V V_T /\ O = O_T
 < apply zip_projedArgs to _ Z' Z.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 projedVal V V_T /\ O = O_T
 < apply zip_is to _ _ Z.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
============================
 projedVal V V_T /\ O = O_T
 < apply zip_is to _ _ Z'.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
============================
 projedVal V V_T /\ O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
============================
 projedVal V V_T /\ O = O_T
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
============================
 projedVal V V_T /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalStmt_isCtx to _ _ _ Ev4.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
H12 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 projedVal V V_T /\ O_T = O_T
 < apply transS_is to _ _ L_T1.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_stmt Body_T
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalStmt_isCtx to _ _ _ EvT3.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_stmt Body_T
H14 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 projedVal V V_T /\ O_T = O_T
 < apply projedCtxs_lookupScopes to _ _ _ PC' Ev6 EvT5.

Subgoal 6.1.29:

Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O1 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 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 Names
H3 : projedArgs ArgVals ArgVals1
H4 : is_list is_value ArgVals
H5 : is_args A1
H6 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1)
H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
PC' : projedCtxs EE2 EE1
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_stmt Body_T
H14 : is_list (is_list (is_pair is_string is_value)) EE1
H15 : projedVal V V_T
============================
 projedVal V V_T /\ O_T = O_T
 < search.

Subgoal 6.1.30:

Variables: T EE EE_T FE FE_T V_T O O_T VF RF
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalRecFields FE EE RF VF O *
============================
 projedVal (recVal VF) V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.30:

Variables: T EE EE_T FE FE_T V_T O O_T VF RF
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
============================
 projedVal (recVal VF) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.30:

Variables: EE EE_T FE FE_T V_T O O_T VF RF RF2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
EvT : evalExpr FE_T EE_T (recBuild RF2) V_T O_T
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
Trans : transRF RF RF2
============================
 projedVal (recVal VF) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.30:

Variables: EE EE_T FE FE_T O O_T VF RF RF2 VF1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
Trans : transRF RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 O_T
============================
 projedVal (recVal VF) (recVal VF1) /\ O = O_T
 < apply IH_RF to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.30:

Variables: EE EE_T FE FE_T O_T VF RF RF2 VF1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O_T @
Ev1 : evalRecFields FE EE RF VF O_T *
H1 : is_recFieldExprs RF
Trans : transRF RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 O_T
H2 : projedFields VF VF1
============================
 projedVal (recVal VF) (recVal VF1) /\ O_T = O_T
 < search.

Subgoal 6.1.31:

Variables: T EE EE_T FE FE_T V V_T O O_T VR Fields F Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
============================
 projedVal V V_T /\ O = O_T
 < case IsE.

Subgoal 6.1.31:

Variables: T EE EE_T FE FE_T V V_T O O_T VR Fields F Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 projedVal V V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O O_T VR Fields F Rec E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O_T
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
============================
 projedVal V V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O O_T VR Fields F Rec E2 VR1 Fields1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
============================
 projedVal V V_T /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @
Ev1 : evalExpr FE EE Rec VR O_T *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
Pr : projedVal VR VR1
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @
Ev1 : evalExpr FE EE Rec VR O_T *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
Pr : projedVal VR VR1
H3 : is_value VR
============================
 projedVal V V_T /\ O_T = O_T
 < M: apply projedVal_matchRec to Pr _ EvT1.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @
Ev1 : evalExpr FE EE Rec VR O_T *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
Pr : projedVal VR VR1
H3 : is_value VR
M : matchRec VR Fs'
M1 : projedFields Fs' Fields1
============================
 projedVal V V_T /\ O_T = O_T
 < apply matchRec_unique to _ M Ev2.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @
Ev1 : evalExpr FE EE Rec VR O_T *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
Pr : projedVal VR VR1
H3 : is_value VR
M : matchRec VR Fields
M1 : projedFields Fields Fields1
============================
 projedVal V V_T /\ O_T = O_T
 < apply projedFields_lookup to M1 Ev3 EvT2.

Subgoal 6.1.31:

Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @
Ev1 : evalExpr FE EE Rec VR O_T *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvT : evalExpr FE_T EE_T E2 VR1 O_T
EvT1 : matchRec VR1 Fields1
EvT2 : lookup Fields1 F V_T
Pr : projedVal VR VR1
H3 : is_value VR
M : matchRec VR Fields
M1 : projedFields Fields Fields1
H4 : projedVal V V_T
============================
 projedVal V V_T /\ O_T = O_T
 < search.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
============================
 projedVal V V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P E_P1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P1
Trans1 : transE E_P1 T
============================
 projedVal V V_T /\ O = O_T
 < apply proj_expr_is to Ev1 _.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P E_P1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P1
Trans1 : transE E_P1 T
H1 : is_expr E_P
============================
 projedVal V V_T /\ O = O_T
 < apply proj_expr_unique to Trans Ev1 _.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
============================
 projedVal V V_T /\ O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
============================
 projedVal V V_T /\ O = O_T
 < Ev': apply proj_evalExpr_forward to Ev1 _ _ _ Ev.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P V'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V' O
Ev'1 : projedVal V V'
============================
 projedVal V V_T /\ O = O_T
 < apply evalExpr_unique to _ _ _ Ev' Ev2.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O_T @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V_P O_T
Ev'1 : projedVal V V_P
============================
 projedVal V V_T /\ O_T = O_T
 < apply transE_is to _ Trans1.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O_T @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V_P O_T
Ev'1 : projedVal V V_P
H2 : is_expr T
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ EvT.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O_T @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V_P O_T
Ev'1 : projedVal V V_P
H2 : is_expr T
H3 : is_value V_T
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O_T @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V_P O_T
Ev'1 : projedVal V V_P
H2 : is_expr T
H3 : is_value V_T
H4 : is_value V_P
============================
 projedVal V V_T /\ O_T = O_T
 < apply evalExpr_isValue to _ _ _ Ev.

Subgoal 6.1.32:

Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O_T @
EvT : evalExpr FE_T EE_T T V_T O_T
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_T *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
Pr : projedVal V_P V_T
Ev' : evalExpr FE EE E_P V_P O_T
Ev'1 : projedVal V V_P
H2 : is_expr T
H3 : is_value V_T
H4 : is_value V_P
H5 : is_value V
============================
 projedVal V V_T /\ O_T = O_T
 < search.

Subgoal 6.2.1:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.1:

Variables: Names' Scope EE FE FE_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 [] = []
 < search.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs EE3 EE1
============================
 O = O_T
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < apply transS_is to _ _ Trans.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs 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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 6.2.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
============================
 O = O_T
 < case IsS.

Subgoal 6.2.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.3:

Variables: Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty Names1 Scope1 E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.3:

Variables: Scope EE FE FE_T O O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (Scope2::EE1)
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.3:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (Scope2::EE1)
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
H4 : projedVal V V1
============================
 O_T = O_T
 < search.

Subgoal 6.2.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
============================
 O = O_T
 < case IsS.

Subgoal 6.2.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
H3 : projedVal V V1
============================
 O_T = O_T
 < search.

Subgoal 6.2.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
============================
 O = O_T
 < case IsS.

Subgoal 6.2.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
============================
 O_T = O_T
 < search.

Subgoal 6.2.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
============================
 O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
============================
 O = O_T
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 O = O_T
 < apply projedCtxs_add_scope to PC.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O4 *
Ev4 : O1 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 6.2.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O4 *
Ev4 : O1 ++ O4 = O_T
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O_T = O_T
 < search.

Subgoal 6.2.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
============================
 O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.2.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
M : matchFalse V
============================
 O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.2.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
============================
 O = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.2.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
M : matchTrue V
============================
 O = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
============================
 O = O_T
 < apply transE_is to _ Trans.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
============================
 O = O_T
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 O = O_T
 < apply projedCtxs_add_scope to PC.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O4 *
Ev4 : O1 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 6.2.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O4 *
Ev4 : O1 ++ O4 = O_T
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : projedVal V V1
H5 : is_expr Cond2
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O_T = O_T
 < search.

Subgoal 6.2.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = O_T
 < Trans: case Trans (keep).

Subgoal 6.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
============================
 O = O_T
 < apply transE_is to _ Trans1.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
============================
 O = O_T
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 O = O_T
 < apply projedCtxs_add_scope to PC.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC' : projedCtxs (Scope1::EE3) (Scope2::EE1)
============================
 O = O_T
 < case PC'.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
============================
 O = O_T
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev3.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3)
============================
 O = O_T
 < case IsEE4+.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < apply transS_is to _ _ Trans2.

Subgoal 6.2.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
============================
 O = O_T
 < case Ctxs.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
============================
 O = O_T
 < IsEE3+: apply evalStmt_isCtx to _ _ _ EvT2.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
============================
 O = O_T
 < case IsEE3+.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
C'' : ctx_names (Scope1::EE3) (Scope'::(B::BRest))
============================
 O = O_T
 < C'': case C''.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE3 EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) EE3
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
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 EE3 (B::BRest)
============================
 O = O_T
 < case C''2 (keep).

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs (A::ARest) EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
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) (B::BRest)
H19 : forall K I, mem (K, I) A -> mem K B
H20 : forall K, mem K B -> exists I, mem (K, I) A
H21 : ctx_names ARest BRest
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev4 EvT3.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 *
Ev5 : O1 ++ O5 = O12
Ev6 : O12 ++ O6 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs (A::ARest) EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
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) (B::BRest)
H19 : forall K I, mem (K, I) A -> mem K B
H20 : forall K, mem K B -> exists I, mem (K, I) A
H21 : ctx_names ARest BRest
============================
 O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 *
Ev5 : O1 ++ O5 = O7
Ev6 : O7 ++ O6 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs (A::ARest) EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
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) (B::BRest)
H19 : forall K I, mem (K, I) A -> mem K B
H20 : forall K, mem K B -> exists I, mem (K, I) A
H21 : ctx_names ARest BRest
============================
 O = O_T
 < apply append_unique to Ev6 EvT5.

Subgoal 6.2.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 *
Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 *
Ev5 : O1 ++ O5 = O7
Ev6 : O7 ++ O6 = O_T
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : projedVal V V1
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest))
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs (A::ARest) EE1
H11 : is_list (is_pair is_string is_value) Scope1
H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H13 : is_stmt Body2
H14 : forall K I, mem (K, I) Scope -> mem K B
H15 : forall K, mem K B -> exists I, mem (K, I) Scope
H16 : ctx_names EE BRest
H17 : is_list (is_pair is_string is_value) Scope2
H18 : is_list (is_list (is_pair is_string is_value)) EE1
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) (B::BRest)
H19 : forall K I, mem (K, I) A -> mem K B
H20 : forall K, mem K B -> exists I, mem (K, I) A
H21 : ctx_names ARest BRest
============================
 O_T = O_T
 < search.

Subgoal 6.2.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 6.2.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
H3 : is_value V
============================
 O = O_T
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.2.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
H3 : is_value V
M : matchFalse V
============================
 O = O_T
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.2.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
============================
 O = O_T
 < case IsS.

Subgoal 6.2.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.9:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
============================
 O2 = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
H3 : is_value V
============================
 O2 = O_T
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.2.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
H3 : is_value V
M : matchTrue V
============================
 O2 = O_T
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.2.9.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.9.2:

Variables: Names' Scope EE FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) Cond V O_T *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
H3 : projedVal V V1
============================
 O_T = O_T
 < search.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 projedCtxs_add_scope to PC.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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')
H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 O_T = O_T
 < search.

Subgoal 6.2.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.11:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
Pr : projedVal (intVal I) (intVal I1)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
Pr : projedVal (intVal I) (intVal I1)
H2 : is_value (intVal I)
============================
 O = O_T
 < M: apply projedVal_matchInt to Pr _ _.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
Pr : projedVal (intVal I) (intVal I1)
H2 : is_value (intVal I)
M : matchInt (intVal I) I1
============================
 O = O_T
 < M: case M.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I1) O1 *
Ev2 : O1 ++ [intVal I1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
Pr : projedVal (intVal I1) (intVal I1)
H2 : is_value (intVal I1)
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 6.2.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E (intVal I1) O1 *
Ev2 : O1 ++ [intVal I1] = O_T
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
Pr : projedVal (intVal I1) (intVal I1)
H2 : is_value (intVal I1)
============================
 O_T = O_T
 < search.

Subgoal 6.2.11.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.11.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (intVal I) trueVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.11.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (intVal I) trueVal
H2 : is_value (intVal I)
============================
 O = O_T
 < M: apply matchInt_projedVal to Pr _ _.

Subgoal 6.2.11.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (intVal I) trueVal
H2 : is_value (intVal I)
M : matchInt trueVal I
============================
 O = O_T
 < case M.

Subgoal 6.2.11.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.11.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (intVal I) falseVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.11.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (intVal I) falseVal
H2 : is_value (intVal I)
============================
 O = O_T
 < M: apply matchInt_projedVal to Pr _ _.

Subgoal 6.2.11.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (intVal I) falseVal
H2 : is_value (intVal I)
M : matchInt falseVal I
============================
 O = O_T
 < case M.

Subgoal 6.2.11.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.11.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal (intVal I) (stringVal S1)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.11.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal (intVal I) (stringVal S1)
H2 : is_value (intVal I)
============================
 O = O_T
 < M: apply matchInt_projedVal to Pr _ _.

Subgoal 6.2.11.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 *
Ev2 : O1 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal (intVal I) (stringVal S1)
H2 : is_value (intVal I)
M : matchInt (stringVal S1) I
============================
 O = O_T
 < case M.

Subgoal 6.2.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.12:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.12.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.12.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal trueVal (intVal I)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.12.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal trueVal (intVal I)
H2 : is_value trueVal
============================
 O = O_T
 < M: apply matchTrue_projedVal to Pr _ _.

Subgoal 6.2.12.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal trueVal (intVal I)
H2 : is_value trueVal
M : matchTrue (intVal I)
============================
 O = O_T
 < case M.

Subgoal 6.2.12.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.12.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal trueVal trueVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.12.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal trueVal trueVal
H2 : is_value trueVal
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 6.2.12.2:

Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O_T
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal trueVal trueVal
H2 : is_value trueVal
============================
 O_T = O_T
 < search.

Subgoal 6.2.12.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.12.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal trueVal falseVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.12.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal trueVal falseVal
H2 : is_value trueVal
============================
 O = O_T
 < M: apply matchTrue_projedVal to Pr _ _.

Subgoal 6.2.12.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal trueVal falseVal
H2 : is_value trueVal
M : matchTrue falseVal
============================
 O = O_T
 < case M.

Subgoal 6.2.12.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.12.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal trueVal (stringVal S1)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.12.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal trueVal (stringVal S1)
H2 : is_value trueVal
============================
 O = O_T
 < M: apply matchTrue_projedVal to Pr _ _.

Subgoal 6.2.12.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal trueVal (stringVal S1)
H2 : is_value trueVal
M : matchTrue (stringVal S1)
============================
 O = O_T
 < case M.

Subgoal 6.2.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.13:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.13.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.13.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal falseVal (intVal I)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.13.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal falseVal (intVal I)
H2 : is_value falseVal
============================
 O = O_T
 < M: apply matchFalse_projedVal to Pr _ _.

Subgoal 6.2.13.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal falseVal (intVal I)
H2 : is_value falseVal
M : matchFalse (intVal I)
============================
 O = O_T
 < case M.

Subgoal 6.2.13.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.13.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal falseVal trueVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.13.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal falseVal trueVal
H2 : is_value falseVal
============================
 O = O_T
 < M: apply matchFalse_projedVal to Pr _ _.

Subgoal 6.2.13.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal falseVal trueVal
H2 : is_value falseVal
M : matchFalse trueVal
============================
 O = O_T
 < case M.

Subgoal 6.2.13.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.13.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal falseVal falseVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.13.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal falseVal falseVal
H2 : is_value falseVal
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 6.2.13.3:

Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O_T
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal falseVal falseVal
H2 : is_value falseVal
============================
 O_T = O_T
 < search.

Subgoal 6.2.13.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.13.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal falseVal (stringVal S1)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.13.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal falseVal (stringVal S1)
H2 : is_value falseVal
============================
 O = O_T
 < M: apply matchFalse_projedVal to Pr _ _.

Subgoal 6.2.13.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
Pr : projedVal falseVal (stringVal S1)
H2 : is_value falseVal
M : matchFalse (stringVal S1)
============================
 O = O_T
 < case M.

Subgoal 6.2.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 O = O_T
 < case IsS.

Subgoal 6.2.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 6.2.14:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 6.2.14.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.14.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal (stringVal S1) (intVal I)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.14.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal (stringVal S1) (intVal I)
H2 : is_value (stringVal S1)
============================
 O = O_T
 < M: apply matchString_projedVal to Pr _ _.

Subgoal 6.2.14.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
Pr : projedVal (stringVal S1) (intVal I)
H2 : is_value (stringVal S1)
M : matchString (intVal I) S1
============================
 O = O_T
 < case M.

Subgoal 6.2.14.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.14.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (stringVal S1) trueVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.14.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (stringVal S1) trueVal
H2 : is_value (stringVal S1)
============================
 O = O_T
 < M: apply matchString_projedVal to Pr _ _.

Subgoal 6.2.14.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
Pr : projedVal (stringVal S1) trueVal
H2 : is_value (stringVal S1)
M : matchString trueVal S1
============================
 O = O_T
 < case M.

Subgoal 6.2.14.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.14.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (stringVal S1) falseVal
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.14.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (stringVal S1) falseVal
H2 : is_value (stringVal S1)
============================
 O = O_T
 < M: apply matchString_projedVal to Pr _ _.

Subgoal 6.2.14.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
Pr : projedVal (stringVal S1) falseVal
H2 : is_value (stringVal S1)
M : matchString falseVal S1
============================
 O = O_T
 < case M.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 O = O_T
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
Pr : projedVal (stringVal S1) (stringVal S2)
============================
 O = O_T
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
Pr : projedVal (stringVal S1) (stringVal S2)
H2 : is_value (stringVal S1)
============================
 O = O_T
 < M: apply projedVal_matchString to Pr _ _.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 *
Ev2 : O1 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
Pr : projedVal (stringVal S1) (stringVal S2)
H2 : is_value (stringVal S1)
M : matchString (stringVal S1) S2
============================
 O = O_T
 < M: case M.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) O1 *
Ev2 : O1 ++ [stringVal S2] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
Pr : projedVal (stringVal S2) (stringVal S2)
H2 : is_value (stringVal S2)
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 6.2.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) O1 *
Ev2 : O1 ++ [stringVal S2] = O_T
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
Pr : projedVal (stringVal S2) (stringVal S2)
H2 : is_value (stringVal S2)
============================
 O_T = O_T
 < search.

Subgoal 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.2.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 6.3.1:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs (Scope::EE) EE_T'
 < case Trans.

Subgoal 6.3.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs (Scope::EE) EE_T'
 < case EvT.

Subgoal 6.3.1:

Variables: Names' Scope EE FE FE_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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'
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs EE3 EE1
============================
 projedCtxs EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 projedCtxs EE' EE_T'
 < apply transS_is to _ _ Trans.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
============================
 projedCtxs EE' EE_T'
 < apply transS_isNames to _ _ Trans.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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
============================
 projedCtxs EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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
============================
 projedCtxs EE' EE_T'
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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' : projedCtxs 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
============================
 projedCtxs EE' EE_T'
 < case Ctxs.

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs 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
============================
 projedCtxs EE' EE_T'
 < apply transS_old_scopes to _ _ Trans.

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs 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
============================
 projedCtxs EE' EE_T'
 < case C (keep).

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
============================
 projedCtxs (((X, V)::Scope)::EE) EE_T'
 < case IsS.

Subgoal 6.3.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 projedCtxs (((X, V)::Scope)::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.3:

Variables: Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty Names1 Scope1 E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
============================
 projedCtxs (((X, V)::Scope)::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.3:

Variables: Scope EE FE FE_T O O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (Scope2::EE1)
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
============================
 projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.3:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (Scope2::EE1)
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
============================
 projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
 < R: case PC.

Subgoal 6.3.3:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
 < unfold .

Subgoal 6.3.3.1:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 forall X1 VB,
   lookup ((X, V1)::Scope2) X1 VB -> exists VA, lookup ((X, V)::Scope) X1 VA
 < intros L.

Subgoal 6.3.3.1:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : lookup ((X, V1)::Scope2) X1 VB
============================
 exists VA, lookup ((X, V)::Scope) X1 VA
 < L: case L.

Subgoal 6.3.3.1.1:

Variables: Scope EE FE FE_T O_T V E Ty Names1 Scope1 E2 EE1 Scope2 X1 VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T
Pr : projedVal V VB
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 exists VA, lookup ((X1, V)::Scope) X1 VA
 < search.

Subgoal 6.3.3.1.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : X = X1 -> false
L1 : lookup Scope2 X1 VB
============================
 exists VA, lookup ((X, V)::Scope) X1 VA
 < apply R to L1.

Subgoal 6.3.3.1.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB VA
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : X = X1 -> false
L1 : lookup Scope2 X1 VB
H4 : lookup Scope X1 VA
============================
 exists VA, lookup ((X, V)::Scope) X1 VA
 < search.

Subgoal 6.3.3.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 forall X1 VA,
   lookup ((X, V)::Scope) X1 VA -> exists VB, lookup ((X, V1)::Scope2) X1 VB
 < intros L.

Subgoal 6.3.3.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : lookup ((X, V)::Scope) X1 VA
============================
 exists VB, lookup ((X, V1)::Scope2) X1 VB
 < L: case L.

Subgoal 6.3.3.2.1:

Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E VA O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal VA V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 exists VB, lookup ((X1, V1)::Scope2) X1 VB
 < search.

Subgoal 6.3.3.2.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : X = X1 -> false
L1 : lookup Scope X1 VA
============================
 exists VB, lookup ((X, V1)::Scope2) X1 VB
 < apply R1 to L1.

Subgoal 6.3.3.2.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
L : X = X1 -> false
L1 : lookup Scope X1 VA
H4 : lookup Scope2 X1 VB
============================
 exists VB, lookup ((X, V1)::Scope2) X1 VB
 < search.

Subgoal 6.3.3.3:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 forall X1 VA VB,
   lookup ((X, V)::Scope) X1 VA -> lookup ((X, V1)::Scope2) X1 VB -> projedVal VA VB
 < intros LA LB.

Subgoal 6.3.3.3:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LA : lookup ((X, V)::Scope) X1 VA
LB : lookup ((X, V1)::Scope2) X1 VB
============================
 projedVal VA VB
 < LA: case LA.

Subgoal 6.3.3.3.1:

Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E VA O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal VA V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LB : lookup ((X1, V1)::Scope2) X1 VB
============================
 projedVal VA VB
 < LB: case LB.

Subgoal 6.3.3.3.1.1:

Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E VA O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T
Pr : projedVal VA VB
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 projedVal VA VB
 < search.

Subgoal 6.3.3.3.1.2:

Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E VA O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal VA V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LB : X1 = X1 -> false
LB1 : lookup Scope2 X1 VB
============================
 projedVal VA VB
 < apply LB to _.

Subgoal 6.3.3.3.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LB : lookup ((X, V1)::Scope2) X1 VB
LA : X = X1 -> false
LA1 : lookup Scope X1 VA
============================
 projedVal VA VB
 < LB: case LB.

Subgoal 6.3.3.3.2.1:

Variables: Scope EE FE FE_T O_T V E Ty Names1 Scope1 E2 EE1 Scope2 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T
Pr : projedVal V VB
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LA : X1 = X1 -> false
LA1 : lookup Scope X1 VA
============================
 projedVal VA VB
 < apply LA to _.

Subgoal 6.3.3.3.2.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LA : X = X1 -> false
LA1 : lookup Scope X1 VA
LB : X = X1 -> false
LB1 : lookup Scope2 X1 VB
============================
 projedVal VA VB
 < apply R2 to LA1 LB1.

Subgoal 6.3.3.3.2.2:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
LA : X = X1 -> false
LA1 : lookup Scope X1 VA
LB : X = X1 -> false
LB1 : lookup Scope2 X1 VB
H4 : projedVal VA VB
============================
 projedVal VA VB
 < search.

Subgoal 6.3.3.4:

Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @
Ev1 : evalExpr FE (Scope::EE) E V O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T
Pr : projedVal V V1
R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA
R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB
R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB
R3 : projedCtxs EE EE1
============================
 projedCtxs EE EE1
 < search.

Subgoal 6.3.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.3.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
============================
 projedCtxs EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
H3 : projedVal V V1
============================
 projedCtxs EE' EE_T'
 < apply transE_is to _ Trans.

Subgoal 6.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
H3 : projedVal V V1
H4 : is_expr E2
============================
 projedCtxs EE' EE_T'
 < apply projedCtxs_replaceScopes to _ _ _ _ _ Ev2 EvT1.

Subgoal 6.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : replaceScopes X V1 EE_T EE_T'
H3 : projedVal V V1
H4 : is_expr E2
H5 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.3.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
============================
 projedCtxs EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
============================
 projedCtxs EE' EE_T'
 < apply transE_is to _ Trans.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
============================
 projedCtxs EE' EE_T'
 < apply lookupScopes_is to _ Ev2.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
============================
 projedCtxs EE' EE_T'
 < Pr: apply projedCtxs_lookupScopes to _ _ _ _ Ev2 EvT1.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
============================
 projedCtxs EE' EE_T'
 < M: apply projedVal_matchRec to Pr _ EvT2.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
============================
 projedCtxs EE' EE_T'
 < apply matchRec_unique to _ Ev3 M.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
============================
 projedCtxs EE' EE_T'
 < apply matchRec_is to _ M.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
H7 : is_list (is_pair is_string is_value) Fs'
============================
 projedCtxs EE' EE_T'
 < apply projedVal_is to _ Pr.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
H7 : is_list (is_pair is_string is_value) Fs'
H8 : is_value RV1
============================
 projedCtxs EE' EE_T'
 < apply matchRec_is to _ EvT2.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
H7 : is_list (is_pair is_string is_value) Fs'
H8 : is_value RV1
H9 : is_list (is_pair is_string is_value) FieldVals1
============================
 projedCtxs EE' EE_T'
 < apply projedFields_updateRecFields to _ _ M1 _ Ev4 EvT3.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
H7 : is_list (is_pair is_string is_value) Fs'
H8 : is_value RV1
H9 : is_list (is_pair is_string is_value) FieldVals1
H10 : projedFields NewVals NewVals1
============================
 projedCtxs EE' EE_T'
 < apply projedCtxs_replaceScopes to _ _ _ _ _ Ev5 EvT4.

Subgoal 6.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs'
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV Fs'
Ev4 : updateRecFields Fields V Fs' NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T E2 V1 O_T
EvT1 : lookupScopes Rec EE_T RV1
EvT2 : matchRec RV1 FieldVals1
EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T'
H4 : projedVal V V1
H5 : is_expr E2
H6 : is_value RV
Pr : projedVal RV RV1
M : matchRec RV Fs'
M1 : projedFields Fs' FieldVals1
H7 : is_list (is_pair is_string is_value) Fs'
H8 : is_value RV1
H9 : is_list (is_pair is_string is_value) FieldVals1
H10 : projedFields NewVals NewVals1
H11 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.3.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.3.6:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 projedCtxs EE' EE_T'
 < apply transE_is to _ Trans.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
============================
 projedCtxs EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 projedCtxs EE' EE_T'
 < apply projedCtxs_add_scope to PC.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 projedCtxs EE' EE_T'
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvT2.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC' : projedCtxs (Scope1::EE') (Scope2::EE_T')
============================
 projedCtxs EE' EE_T'
 < case PC'.

Subgoal 6.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 projedCtxs EE' EE_T'
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
============================
 projedCtxs EE' EE_T'
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.3.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
============================
 projedCtxs EE' EE_T'
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.3.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
M : matchFalse V
============================
 projedCtxs EE' EE_T'
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.3.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.3.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.3.7:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.3.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 projedCtxs EE' EE_T'
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
============================
 projedCtxs EE' EE_T'
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.3.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
============================
 projedCtxs EE' EE_T'
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.3.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O1 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
Pr : projedVal V V1
H4 : is_value V
M : matchTrue V
============================
 projedCtxs EE' EE_T'
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
============================
 projedCtxs EE' EE_T'
 < apply transE_is to _ Trans.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
============================
 projedCtxs EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 projedCtxs EE' EE_T'
 < apply projedCtxs_add_scope to PC.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 projedCtxs EE' EE_T'
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC' : projedCtxs (Scope1::EE') (Scope2::EE_T')
============================
 projedCtxs EE' EE_T'
 < case PC'.

Subgoal 6.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchFalse V1
EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4
EvT3 : O1 ++ O4 = O_T
H4 : is_expr Cond2
H5 : ctx_names ([]::(Scope::EE)) ([]::Names')
H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H10 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.3.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans (keep).

Subgoal 6.3.8:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
============================
 projedCtxs EE' EE_T'
 < apply transE_is to _ Trans1.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
============================
 projedCtxs EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 projedCtxs EE' EE_T'
 < PC+: apply projedCtxs_add_scope to PC.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 projedCtxs EE' EE_T'
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC' : projedCtxs (Scope1::EE3) (Scope2::EE1)
============================
 projedCtxs EE' EE_T'
 < PC'': case PC'.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
============================
 projedCtxs EE' EE_T'
 < apply transS_is to _ _ Trans2.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
============================
 projedCtxs EE' EE_T'
 < IsEE3+: apply evalStmt_isCtx to _ _ _ Ev3.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3)
============================
 projedCtxs EE' EE_T'
 < case IsEE3+.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 projedCtxs EE' EE_T'
 < IsEE1+: apply evalStmt_isCtx to _ _ _ EvT2.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
IsEE1+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1)
============================
 projedCtxs EE' EE_T'
 < case IsEE1+.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 projedCtxs EE' EE_T'
 < PC+: case PC+.

Subgoal 6.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC+3 : projedCtxs (Scope::EE) EE_T
============================
 projedCtxs EE' EE_T'
 < case PC+3.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE3 EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
============================
 projedCtxs EE' EE_T'
 < NS: apply evalStmt_names_same to _ _ _ Ev3.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' EE''
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::EE'') O3 *
Ev4 : evalStmt FE EE'' (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs EE'' EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) EE''
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
NS : names_same (Scope::EE) EE''
============================
 projedCtxs EE' EE_T'
 < case NS.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 *
Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs (B1::BRest1) EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1
H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope
H16 : names_same EE BRest1
============================
 projedCtxs EE' EE_T'
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 *
Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs (B1::BRest1) EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1
H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope
H16 : names_same EE BRest1
C : ctx_names (Scope'::(B1::BRest1)) Names2
============================
 projedCtxs EE' EE_T'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 *
Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names')
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs (B1::BRest1) EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1
H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope
H16 : names_same EE BRest1
C : ctx_names (Scope'::(B1::BRest1)) (Scope'1::Names')
============================
 projedCtxs EE' EE_T'
 < case C.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 *
Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names')
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs (B1::BRest1) EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1
H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope
H16 : names_same EE BRest1
H17 : forall K I, mem (K, I) Scope' -> mem K Scope'1
H18 : forall K, mem K Scope'1 -> exists I, mem (K, I) Scope'
H19 : ctx_names (B1::BRest1) Names'
============================
 projedCtxs EE' EE_T'
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev4 EvT3.

Subgoal 6.3.8.1:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) (B::BRest)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 *
Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names')
EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5
EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6
EvT4 : O1 ++ O5 = O7
EvT5 : O7 ++ O6 = O_T
H3 : is_expr Cond2
H4 : ctx_names ([]::(Scope::EE)) ([]::Names')
PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA
PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB
PC''2 : forall X VA VB,
          lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB
PC''3 : projedCtxs (B1::BRest1) EE1
H5 : is_stmt Body2
H6 : is_list (is_pair is_string is_value) Scope'
H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H8 : is_list (is_pair is_string is_value) Scope2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H13 : projedCtxs EE BRest
H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1
H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope
H16 : names_same EE BRest1
H17 : forall K I, mem (K, I) Scope' -> mem K Scope'1
H18 : forall K, mem K Scope'1 -> exists I, mem (K, I) Scope'
H19 : ctx_names (B1::BRest1) Names'
H20 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
============================
 projedCtxs EE' EE_T'
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 6.3.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
============================
 projedCtxs EE' EE_T'
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.3.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
H3 : is_value V
============================
 projedCtxs EE' EE_T'
 < M: apply projedVal_matchFalse to Pr _ EvT1.

Subgoal 6.3.8.2:

Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O_T *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O_T ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
Pr : projedVal V V1
H3 : is_value V
M : matchFalse V
============================
 projedCtxs EE' EE_T'
 < apply matchTrue_matchFalse_exclusive to _ _ M.

Subgoal 6.3.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
============================
 projedCtxs (Scope::EE) EE_T'
 < case IsS.

Subgoal 6.3.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
============================
 projedCtxs (Scope::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.9:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 projedCtxs (Scope::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.3.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
============================
 projedCtxs (Scope::EE) EE_T'
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 6.3.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
H3 : is_value V
============================
 projedCtxs (Scope::EE) EE_T'
 < M: apply projedVal_matchTrue to Pr _ EvT1.

Subgoal 6.3.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @
Ev1 : evalExpr FE (Scope::EE) Cond V O2 *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 V1 O2
EvT1 : matchTrue V1
EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3
EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4
EvT4 : O2 ++ O3 = O12
EvT5 : O12 ++ O4 = O_T
Pr : projedVal V V1
H3 : is_value V
M : matchTrue V
============================
 projedCtxs (Scope::EE) EE_T'
 < apply matchTrue_matchFalse_exclusive to _ M _.

Subgoal 6.3.9.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T' Cond2 V1 O_T
EvT1 : matchFalse V1
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 *
============================
 projedCtxs EE' EE_T'
 < case IsS.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < EvT: case EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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')
============================
 projedCtxs EE' EE_T'
 < apply projedCtxs_add_scope to PC.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 projedCtxs EE' EE_T'
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
PC' : projedCtxs (Scope1::EE') (Scope2::EE_T')
============================
 projedCtxs EE' EE_T'
 < case PC'.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
H4 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA
H5 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB
H6 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB
H7 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.3.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 projedCtxs (Scope::EE) EE_T'
 < case IsS.

Subgoal 6.3.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 projedCtxs (Scope::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.11:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
============================
 projedCtxs (Scope::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.11.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 I1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.11.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.11.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.11.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 projedCtxs (Scope::EE) EE_T'
 < case IsS.

Subgoal 6.3.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 projedCtxs (Scope::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.12:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 projedCtxs (Scope::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.12.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.12.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.12.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.12.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 projedCtxs (Scope::EE) EE_T'
 < case IsS.

Subgoal 6.3.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 projedCtxs (Scope::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.13:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 projedCtxs (Scope::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.13.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.13.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.13.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.13.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 projedCtxs (Scope::EE) EE_T'
 < case IsS.

Subgoal 6.3.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 projedCtxs (Scope::EE) EE_T'
 < Trans: case Trans.

Subgoal 6.3.14:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
============================
 projedCtxs (Scope::EE) EE_T'
 < EvT: case EvT.

Subgoal 6.3.14.1:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 I O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (intVal I) O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.14.2:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 trueVal O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.14.3:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 falseVal O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.3.14.4:

Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 S2 O1
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 projedCtxs (Scope::EE) EE_T'
 < search.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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 *
============================
 projedCtxs EE' EE_T'
 < Trans: case Trans.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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'
============================
 projedCtxs EE' EE_T'
 < apply names_is to _ Ev1.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < apply proj_stmt_is to Ev2 _ _.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
============================
 projedCtxs EE' EE_T'
 < PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT.

Subgoal 6.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
PC' : projedCtxs EE_P EE_T'
============================
 projedCtxs EE' EE_T'
 < Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 6.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 EE''
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
PC' : projedCtxs EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE'' O
Ev'1 : scopes_same EE' EE''
============================
 projedCtxs EE' EE_T'
 < apply evalStmt_unique to _ _ _ Ev' Ev3.

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
PC' : projedCtxs EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
============================
 projedCtxs EE' EE_T'
 < apply scopes_same_projedCtxs to Ev'1 PC'.

Subgoal 6.3.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 EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
PC : projedCtxs (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
PC' : projedCtxs EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
H3 : projedCtxs EE' EE_T'
============================
 projedCtxs EE' EE_T'
 < search.

Subgoal 6.4.1:

Variables: T EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA nilArgs T
Ev : evalArgs FE EE nilArgs [] [] @
EvT : evalArgs FE_T EE_T T V_T O_T
============================
 projedArgs [] V_T /\ [] = O_T
 < case Trans.

Subgoal 6.4.1:

Variables: EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE nilArgs [] [] @
EvT : evalArgs FE_T EE_T nilArgs V_T O_T
============================
 projedArgs [] V_T /\ [] = O_T
 < case EvT.

Subgoal 6.4.1:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE nilArgs [] [] @
============================
 projedArgs [] [] /\ [] = []
 < search.

Subgoal 6.4.2:

Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
EvT : evalArgs FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
============================
 projedArgs (V1::VRest) V_T /\ O = O_T
 < case IsA.

Subgoal 6.4.2:

Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
EvT : evalArgs FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 projedArgs (V1::VRest) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.4.2:

Variables: EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E A2 E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
============================
 projedArgs (V1::VRest) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.4.2:

Variables: EE EE_T FE FE_T O O_T O2 O3 VRest V1 Rest E A2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalArgs FE_T EE_T A2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
============================
 projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.4.2:

Variables: EE EE_T FE FE_T O O_T O3 VRest V1 Rest E A2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalArgs FE_T EE_T A2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H3 : projedVal V1 V2
============================
 projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
 < apply IH_A to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.4.2:

Variables: EE EE_T FE FE_T O O_T VRest V1 Rest E A2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalArgs FE EE Rest VRest O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalArgs FE_T EE_T A2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H3 : projedVal V1 V2
H4 : projedArgs VRest VRest1
============================
 projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 6.4.2:

Variables: EE EE_T FE FE_T O_T VRest V1 Rest E A2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O_T @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalArgs FE EE Rest VRest O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalArgs FE_T EE_T A2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H3 : projedVal V1 V2
H4 : projedArgs VRest VRest1
============================
 projedArgs (V1::VRest) (V2::VRest1) /\ O_T = O_T
 < search.

Subgoal 6.4.3:

Variables: T EE EE_T FE FE_T V V_T O O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V O @
EvT : evalArgs FE_T EE_T T V_T O_T
============================
 projedArgs V V_T /\ O = O_T
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 6.4.3:

Variables: T EE EE_T FE FE_T V V_T O O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V O @
EvT : evalArgs FE_T EE_T T V_T O_T
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 projedArgs V V_T /\ O = O_T
 < case Or.

Subgoal 6.5.1:

Variables: T EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF nilRecFieldExprs T
Ev : evalRecFields FE EE nilRecFieldExprs [] [] @
EvT : evalRecFields FE_T EE_T T V_T O_T
============================
 projedFields [] V_T /\ [] = O_T
 < case Trans.

Subgoal 6.5.1:

Variables: EE EE_T FE FE_T V_T O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE nilRecFieldExprs [] [] @
EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T O_T
============================
 projedFields [] V_T /\ [] = O_T
 < case EvT.

Subgoal 6.5.1:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE nilRecFieldExprs [] [] @
============================
 projedFields [] [] /\ [] = []
 < search.

Subgoal 6.5.2:

Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
EvT : evalRecFields FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
============================
 projedFields ((F, V1)::VRest) V_T /\ O = O_T
 < case IsRF.

Subgoal 6.5.2:

Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
EvT : evalRecFields FE_T EE_T T V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 projedFields ((F, V1)::VRest) V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 6.5.2:

Variables: EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O_T
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
============================
 projedFields ((F, V1)::VRest) V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 6.5.2:

Variables: EE EE_T FE FE_T O O_T O2 O3 VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
============================
 projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 6.5.2:

Variables: EE EE_T FE FE_T O O_T O3 VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H4 : projedVal V1 V2
============================
 projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
 < apply IH_RF to _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 6.5.2:

Variables: EE EE_T FE FE_T O O_T VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalRecFields FE EE Rest VRest O4 *
Ev3 : O1 ++ O4 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H4 : projedVal V1 V2
H5 : projedFields VRest VRest1
============================
 projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 6.5.2:

Variables: EE EE_T FE FE_T O_T VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O_T @
Ev1 : evalExpr FE EE E V1 O1 *
Ev2 : evalRecFields FE EE Rest VRest O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 O1
EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4
EvT2 : O1 ++ O4 = O_T
H4 : projedVal V1 V2
H5 : projedFields VRest VRest1
============================
 projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O_T = O_T
 < search.

Subgoal 6.5.3:

Variables: T EE EE_T FE FE_T V V_T O O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V O @
EvT : evalRecFields FE_T EE_T T V_T O_T
============================
 projedFields V V_T /\ O = O_T
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 6.5.3:

Variables: T EE EE_T FE FE_T V V_T O O_T
IH_E : forall E T EE EE_T FE FE_T V V_T O O_T,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T'
IH_A : forall A T EE EE_T FE FE_T V V_T O O_T,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T
IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V O @
EvT : evalRecFields FE_T EE_T T V_T O_T
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 projedFields V V_T /\ O = O_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.
 < Theorem projedCtxs_lookupScopes_exists_forward :
     forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB.

============================
 forall A B X VA,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> lookupScopes X A VA -> exists VB,
     lookupScopes X B VB /\ projedVal VA VB
 < induction on 4.

IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
============================
 forall A B X VA,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B @ -> lookupScopes X A VA -> exists VB,
     lookupScopes X B VB /\ projedVal VA VB
 < intros IsA IsB IsX PC L.

Variables: A B X VA
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B @
L : lookupScopes X A VA
============================
 exists VB, lookupScopes X B VB /\ projedVal VA VB
 < LA: case L.

Subgoal 1:

Variables: B X VA Rest L
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B @
LA : lookup L X VA
============================
 exists VB, lookupScopes X B VB /\ projedVal VA VB
 < PC: case PC.

Subgoal 1:

Variables: X VA Rest L BRest B1
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
LA : lookup L X VA
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < LB: apply PC1 to LA.

Subgoal 1:

Variables: X VA Rest L BRest B1 VB
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
LA : lookup L X VA
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
LB : lookup B1 X VB
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < apply PC2 to LA LB.

Subgoal 1:

Variables: X VA Rest L BRest B1 VB
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
LA : lookup L X VA
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
LB : lookup B1 X VB
H1 : projedVal VA VB
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < search.

Subgoal 2:

Variables: B X VA Rest L
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B @
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
============================
 exists VB, lookupScopes X B VB /\ projedVal VA VB
 < case IsA.

Subgoal 2:

Variables: B X VA Rest L
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B @
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists VB, lookupScopes X B VB /\ projedVal VA VB
 < PC: case PC.

Subgoal 2:

Variables: X VA Rest L BRest B1
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < IsB: case IsB.

Subgoal 2:

Variables: X VA Rest L BRest B1
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < apply IH to _ _ _ PC3 LA1.

Subgoal 2:

Variables: X VA Rest L BRest B1 VB
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : lookupScopes X BRest VB
H4 : projedVal VA VB
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < Or: apply lookup_string_value_list_or_no to IsB IsX.

Subgoal 2:

Variables: X VA Rest L BRest B1 VB
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : lookupScopes X BRest VB
H4 : projedVal VA VB
Or : (exists V, lookup B1 X V) \/ no_lookup B1 X
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < LB: case Or.

Subgoal 2.1:

Variables: X VA Rest L BRest B1 VB V
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : lookupScopes X BRest VB
H4 : projedVal VA VB
LB : lookup B1 X V
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < LA': apply PC to LB.

Subgoal 2.1:

Variables: X VA Rest L BRest B1 VB V VA1
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : lookupScopes X BRest VB
H4 : projedVal VA VB
LB : lookup B1 X V
LA' : lookup L X VA1
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < apply no_lookup to LA LA'.

Subgoal 2.2:

Variables: X VA Rest L BRest B1 VB
IH : forall A B X VA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB,
         lookupScopes X B VB /\ projedVal VA VB
IsX : is_string X
LA : no_lookup L X
LA1 : lookupScopes X Rest VA
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest *
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : lookupScopes X BRest VB
H4 : projedVal VA VB
LB : no_lookup B1 X
============================
 exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
 < search.

Proof completed.
 < Theorem projedArgs_zip  [N] :
     forall A B (N : list N) Z,
       projedArgs A B -> zip N A Z -> exists Z', zip N B Z'.

============================
 forall A B N Z, projedArgs A B -> zip N A Z -> exists Z', zip N B Z'
 < induction on 1.

IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
============================
 forall A B N Z, projedArgs A B @ -> zip N A Z -> exists Z', zip N B Z'
 < intros PA Z.

Variables: A B N Z
IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
PA : projedArgs A B @
Z : zip N A Z
============================
 exists Z', zip N B Z'
 < PA: case PA.

Subgoal 1:

Variables: N Z
IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
Z : zip N [] Z
============================
 exists Z', zip N [] Z'
 < case Z.

Subgoal 1:

IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
============================
 exists Z', zip [] [] Z'
 < search.

Subgoal 2:

Variables: N Z BRest VB ARest VA
IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
Z : zip N (VA::ARest) Z
PA : projedVal VA VB
PA1 : projedArgs ARest BRest *
============================
 exists Z', zip N (VB::BRest) Z'
 < Z: case Z.

Subgoal 2:

Variables: BRest VB ARest VA Rest A1 ARest1
IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
PA : projedVal VA VB
PA1 : projedArgs ARest BRest *
Z : zip ARest1 ARest Rest
============================
 exists Z', zip (A1::ARest1) (VB::BRest) Z'
 < apply IH to PA1 Z.

Subgoal 2:

Variables: BRest VB ARest VA Rest A1 ARest1 Z'
IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z'
PA : projedVal VA VB
PA1 : projedArgs ARest BRest *
Z : zip ARest1 ARest Rest
H1 : zip ARest1 BRest Z'
============================
 exists Z', zip (A1::ARest1) (VB::BRest) Z'
 < search.

Proof completed.
 < Theorem projedFields_lookup_exists :
     forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA -> exists VB,
         lookup FB X VB /\ projedVal VA VB.

============================
 forall FA FB X VA,
   projedFields FA FB -> lookup FA X VA -> exists VB,
     lookup FB X VB /\ projedVal VA VB
 < induction on 2.

IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
============================
 forall FA FB X VA,
   projedFields FA FB -> lookup FA X VA @ -> exists VB,
     lookup FB X VB /\ projedVal VA VB
 < intros PF L.

Variables: FA FB X VA
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
PF : projedFields FA FB
L : lookup FA X VA @
============================
 exists VB, lookup FB X VB /\ projedVal VA VB
 < L: case L.

Subgoal 1:

Variables: FB X VA Rest
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
PF : projedFields ((X, VA)::Rest) FB
============================
 exists VB, lookup FB X VB /\ projedVal VA VB
 < case PF.

Subgoal 1:

Variables: X VA Rest BRest VB
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
H1 : projedVal VA VB
H2 : projedFields Rest BRest
============================
 exists VB1, lookup ((X, VB)::BRest) X VB1 /\ projedVal VA VB1
 < search.

Subgoal 2:

Variables: FB X VA Rest V K
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
PF : projedFields ((K, V)::Rest) FB
L : K = X -> false
L1 : lookup Rest X VA *
============================
 exists VB, lookup FB X VB /\ projedVal VA VB
 < PF: case PF.

Subgoal 2:

Variables: X VA Rest V K BRest VB
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
L : K = X -> false
L1 : lookup Rest X VA *
PF : projedVal V VB
PF1 : projedFields Rest BRest
============================
 exists VB1, lookup ((K, VB)::BRest) X VB1 /\ projedVal VA VB1
 < apply IH to PF1 L1.

Subgoal 2:

Variables: X VA Rest V K BRest VB VB1
IH : forall FA FB X VA,
       projedFields FA FB -> lookup FA X VA * -> exists VB,
         lookup FB X VB /\ projedVal VA VB
L : K = X -> false
L1 : lookup Rest X VA *
PF : projedVal V VB
PF1 : projedFields Rest BRest
H1 : lookup BRest X VB1
H2 : projedVal VA VB1
============================
 exists VB1, lookup ((K, VB)::BRest) X VB1 /\ projedVal VA VB1
 < search.

Proof completed.
 < Theorem projedCtxs_replaceScopes_exists_forward :
     forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB.

============================
 forall A B X VA VB RA,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA ->
   exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
 < induction on 6.

IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
============================
 forall A B X VA VB RA,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA @ ->
   exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
 < intros IsA IsB IsX PC PV RA.

Variables: A B X VA VB RA
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs A B
PV : projedVal VA VB
RA : replaceScopes X VA A RA @
============================
 exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
 < RA: case RA.

Subgoal 1:

Variables: B X VA VB I Rest LRemain L
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
============================
 exists RB, replaceScopes X VB B RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < case IsA.

Subgoal 1:

Variables: B X VA VB I Rest LRemain L
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists RB, replaceScopes X VB B RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < PC: case PC.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < LA: apply mem_lookup to _ RA.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < LB: apply PC1 to LA.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < MB: apply lookup_mem to LB.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < IsB: case IsB.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < RB: apply remove_all_exists to IsB IsX.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 exists RB,
   replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
 < exists ((X, VB)::EE')::BRest.

Subgoal 1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 replaceScopes X VB (B1::BRest) (((X, VB)::EE')::BRest) /\
 projedCtxs (((X, VA)::LRemain)::Rest) (((X, VB)::EE')::BRest)
 < split.

Subgoal 1.1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 replaceScopes X VB (B1::BRest) (((X, VB)::EE')::BRest)
 < search.

Subgoal 1.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 projedCtxs (((X, VA)::LRemain)::Rest) (((X, VB)::EE')::BRest)
 < unfold .

Subgoal 1.2.1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 forall X1 VB1,
   lookup ((X, VB)::EE') X1 VB1 -> exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < intros LB'.

Subgoal 1.2.1:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : lookup ((X, VB)::EE') X1 VB2
============================
 exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < LB': case LB'.

Subgoal 1.2.1.1:

Variables: VA I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA VB2
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
============================
 exists VA1, lookup ((X1, VA)::LRemain) X1 VA1
 < search.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
============================
 exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < LB'': apply remove_all_lookup_other to RB LB'1 LB'.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LB'' : lookup B1 X1 VB2
============================
 exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < LA'': apply PC to LB''.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LB'' : lookup B1 X1 VB2
LA'' : lookup L X1 VA1
============================
 exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < LA': apply remove_all_lookup_other_back to RA1 LA'' _.

Subgoal 1.2.1.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LB'' : lookup B1 X1 VB2
LA'' : lookup L X1 VA1
LA' : lookup LRemain X1 VA1
============================
 exists VA1, lookup ((X, VA)::LRemain) X1 VA1
 < search.

Subgoal 1.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 forall X1 VA1,
   lookup ((X, VA)::LRemain) X1 VA1 -> exists VB1, lookup ((X, VB)::EE') X1 VB1
 < intros LA'.

Subgoal 1.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : lookup ((X, VA)::LRemain) X1 VA1
============================
 exists VB1, lookup ((X, VB)::EE') X1 VB1
 < LA': case LA'.

Subgoal 1.2.2.1:

Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA1 VB
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
============================
 exists VB1, lookup ((X1, VB)::EE') X1 VB1
 < search.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
============================
 exists VB1, lookup ((X, VB)::EE') X1 VB1
 < LA'': apply remove_all_lookup_other to RA1 LA'1 _.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LA'' : lookup L X1 VA1
============================
 exists VB1, lookup ((X, VB)::EE') X1 VB1
 < LB'': apply PC1 to LA''.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LA'' : lookup L X1 VA1
LB'' : lookup B1 X1 VB2
============================
 exists VB1, lookup ((X, VB)::EE') X1 VB1
 < LB': apply remove_all_lookup_other_back to RB LB'' _.

Subgoal 1.2.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LA'' : lookup L X1 VA1
LB'' : lookup B1 X1 VB2
LB' : lookup EE' X1 VB2
============================
 exists VB1, lookup ((X, VB)::EE') X1 VB1
 < search.

Subgoal 1.2.3:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 forall X1 VA1 VB1,
   lookup ((X, VA)::LRemain) X1 VA1 -> lookup ((X, VB)::EE') X1 VB1 -> projedVal VA1 VB1
 < intros LA' LB'.

Subgoal 1.2.3:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : lookup ((X, VA)::LRemain) X1 VA1
LB' : lookup ((X, VB)::EE') X1 VB2
============================
 projedVal VA1 VB2
 < LA': case LA'.

Subgoal 1.2.3.1:

Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA1 VB
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
LB' : lookup ((X1, VB)::EE') X1 VB2
============================
 projedVal VA1 VB2
 < LB': case LB'.

Subgoal 1.2.3.1.1:

Variables: I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA1 VB2
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
============================
 projedVal VA1 VB2
 < search.

Subgoal 1.2.3.1.2:

Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA1 VB
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
LB' : X1 = X1 -> false
LB'1 : lookup EE' X1 VB2
============================
 projedVal VA1 VB2
 < apply LB' to _.

Subgoal 1.2.3.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LB' : lookup ((X, VB)::EE') X1 VB2
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
============================
 projedVal VA1 VB2
 < LB': case LB'.

Subgoal 1.2.3.2.1:

Variables: VA I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X1
PV : projedVal VA VB2
RA : mem (X1, I) L
RA1 : remove_all L X1 LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X1 V'
LB : lookup B1 X1 VB1
MB : mem (X1, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X1 EE'
LA' : X1 = X1 -> false
LA'1 : lookup LRemain X1 VA1
============================
 projedVal VA1 VB2
 < apply LA' to _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
============================
 projedVal VA1 VB2
 < LA'': apply remove_all_lookup_other to RA1 LA'1 _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LA'' : lookup L X1 VA1
============================
 projedVal VA1 VB2
 < LB'': apply remove_all_lookup_other to RB LB'1 _.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LA'' : lookup L X1 VA1
LB'' : lookup B1 X1 VB2
============================
 projedVal VA1 VB2
 < apply PC2 to LA'' LB''.

Subgoal 1.2.3.2.2:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
LA' : X = X1 -> false
LA'1 : lookup LRemain X1 VA1
LB' : X = X1 -> false
LB'1 : lookup EE' X1 VB2
LA'' : lookup L X1 VA1
LB'' : lookup B1 X1 VB2
H3 : projedVal VA1 VB2
============================
 projedVal VA1 VB2
 < search.

Subgoal 1.2.4:

Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE'
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : mem (X, I) L
RA1 : remove_all L X LRemain
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
LA : lookup L X V'
LB : lookup B1 X VB1
MB : mem (X, VB1) B1
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
RB : remove_all B1 X EE'
============================
 projedCtxs Rest BRest
 < search.

Subgoal 2:

Variables: B X VA VB New L Rest
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
============================
 exists RB, replaceScopes X VB B RB /\ projedCtxs (L::New) RB
 < case IsA.

Subgoal 2:

Variables: B X VA VB New L Rest
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) B
IsX : is_string X
PC : projedCtxs (L::Rest) B
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
============================
 exists RB, replaceScopes X VB B RB /\ projedCtxs (L::New) RB
 < PC: case PC.

Subgoal 2:

Variables: X VA VB New L Rest BRest B1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest)
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < IsB: case IsB.

Subgoal 2:

Variables: X VA VB New L Rest BRest B1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < apply IH to _ _ _ PC3 PV RA1.

Subgoal 2:

Variables: X VA VB New L Rest BRest B1 RB
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : replaceScopes X VB BRest RB
H4 : projedCtxs New RB
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < Or: apply lookup_string_value_list_or_no to IsB IsX.

Subgoal 2:

Variables: X VA VB New L Rest BRest B1 RB
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : replaceScopes X VB BRest RB
H4 : projedCtxs New RB
Or : (exists V, lookup B1 X V) \/ no_lookup B1 X
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < LB: case Or.

Subgoal 2.1:

Variables: X VA VB New L Rest BRest B1 RB V
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : replaceScopes X VB BRest RB
H4 : projedCtxs New RB
LB : lookup B1 X V
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < LA: apply PC to LB.

Subgoal 2.1:

Variables: X VA VB New L Rest BRest B1 RB V VA1
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : replaceScopes X VB BRest RB
H4 : projedCtxs New RB
LB : lookup B1 X V
LA : lookup L X VA1
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < apply no_lookup to RA LA.

Subgoal 2.2:

Variables: X VA VB New L Rest BRest B1 RB
IH : forall A B X VA VB RA,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * ->
       exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
IsX : is_string X
PV : projedVal VA VB
RA : no_lookup L X
RA1 : replaceScopes X VA Rest New *
H1 : is_list (is_pair is_string is_value) L
H2 : is_list (is_list (is_pair is_string is_value)) Rest
PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA
PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB
PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB
PC3 : projedCtxs Rest BRest
IsB : is_list (is_pair is_string is_value) B1
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest
H3 : replaceScopes X VB BRest RB
H4 : projedCtxs New RB
LB : no_lookup B1 X
============================
 exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
 < search.

Proof completed.
 < Theorem projedFields_replaceRecVal_exists_forward :
     forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB.

============================
 forall F VA VB FA RA FB,
   projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA -> exists RB,
     replaceRecVal F VB FB RB /\ projedFields RA RB
 < induction on 3.

IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
============================
 forall F VA VB FA RA FB,
   projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA @ -> exists RB,
     replaceRecVal F VB FB RB /\ projedFields RA RB
 < intros PF PV RA.

Variables: F VA VB FA RA FB
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PF : projedFields FA FB
PV : projedVal VA VB
RA : replaceRecVal F VA FA RA @
============================
 exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB
 < RA: case RA.

Subgoal 1:

Variables: F VA VB FB Rest VOld
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PF : projedFields ((F, VOld)::Rest) FB
PV : projedVal VA VB
============================
 exists RB, replaceRecVal F VB FB RB /\ projedFields ((F, VA)::Rest) RB
 < PF: case PF.

Subgoal 1:

Variables: F VA VB Rest VOld BRest VB1
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PV : projedVal VA VB
PF : projedVal VOld VB1
PF1 : projedFields Rest BRest
============================
 exists RB,
   replaceRecVal F VB ((F, VB1)::BRest) RB /\ projedFields ((F, VA)::Rest) RB
 < search.

Subgoal 2:

Variables: F VA VB FB RRest VO O Rest
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PF : projedFields ((O, VO)::Rest) FB
PV : projedVal VA VB
RA : F = O -> false
RA1 : replaceRecVal F VA Rest RRest *
============================
 exists RB, replaceRecVal F VB FB RB /\ projedFields ((O, VO)::RRest) RB
 < PF: case PF.

Subgoal 2:

Variables: F VA VB RRest VO O Rest BRest VB1
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PV : projedVal VA VB
RA : F = O -> false
RA1 : replaceRecVal F VA Rest RRest *
PF : projedVal VO VB1
PF1 : projedFields Rest BRest
============================
 exists RB,
   replaceRecVal F VB ((O, VB1)::BRest) RB /\ projedFields ((O, VO)::RRest) RB
 < apply IH to PF1 PV RA1.

Subgoal 2:

Variables: F VA VB RRest VO O Rest BRest VB1 RB
IH : forall F VA VB FA RA FB,
       projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB,
         replaceRecVal F VB FB RB /\ projedFields RA RB
PV : projedVal VA VB
RA : F = O -> false
RA1 : replaceRecVal F VA Rest RRest *
PF : projedVal VO VB1
PF1 : projedFields Rest BRest
H1 : replaceRecVal F VB BRest RB
H2 : projedFields RRest RB
============================
 exists RB,
   replaceRecVal F VB ((O, VB1)::BRest) RB /\ projedFields ((O, VO)::RRest) RB
 < search.

Proof completed.
 < Theorem projedFields_updateRecFields_exists_forward :
     forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB.

============================
 forall FA FB Fs VA VB RA,
   is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
   updateRecFields Fs VA FA RA -> exists RB,
     updateRecFields Fs VB FB RB /\ projedFields RA RB
 < induction on 4.

IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
============================
 forall FA FB Fs VA VB RA,
   is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
   updateRecFields Fs VA FA RA @ -> exists RB,
     updateRecFields Fs VB FB RB /\ projedFields RA RB
 < intros IsA PF PV UA.

Variables: FA FB Fs VA VB RA
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : updateRecFields Fs VA FA RA @
============================
 exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB
 < UA: case UA.

Subgoal 1:

Variables: FA FB VA VB RA F
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : replaceRecVal F VA FA RA
============================
 exists RB, updateRecFields [F] VB FB RB /\ projedFields RA RB
 < apply projedFields_replaceRecVal_exists_forward to PF PV UA.

Subgoal 1:

Variables: FA FB VA VB RA F RB
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : replaceRecVal F VA FA RA
H1 : replaceRecVal F VB FB RB
H2 : projedFields RA RB
============================
 exists RB, updateRecFields [F] VB FB RB /\ projedFields RA RB
 < search.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < L: apply projedFields_lookup_exists to PF UA.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < apply lookup_is_value to _ UA.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
H1 : is_value RV
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < M: apply matchRec_projedVal to L1 _ UA1.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs'
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
H1 : is_value RV
M : matchRec VB1 Fs'
M1 : projedFields Fields Fs'
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < apply matchRec_is to _ UA1.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs'
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
H1 : is_value RV
M : matchRec VB1 Fs'
M1 : projedFields Fields Fs'
H2 : is_list (is_pair is_string is_value) Fields
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < UB: apply IH to _ M1 PV UA2.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' RB
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
H1 : is_value RV
M : matchRec VB1 Fs'
M1 : projedFields Fields Fs'
H2 : is_list (is_pair is_string is_value) Fields
UB : updateRecFields FRest VB Fs' RB
UB1 : projedFields Updated RB
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < apply projedFields_replaceRecVal_exists_forward to _ _ UA3 with
     VB = recVal RB.

Subgoal 2:

Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' RB RB1
IH : forall FA FB Fs VA VB RA,
       is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB ->
       updateRecFields Fs VA FA RA * -> exists RB,
         updateRecFields Fs VB FB RB /\ projedFields RA RB
IsA : is_list (is_pair is_string is_value) FA
PF : projedFields FA FB
PV : projedVal VA VB
UA : lookup FA F RV
UA1 : matchRec RV Fields
UA2 : updateRecFields FRest VA Fields Updated *
UA3 : replaceRecVal F (recVal Updated) FA RA
L : lookup FB F VB1
L1 : projedVal RV VB1
H1 : is_value RV
M : matchRec VB1 Fs'
M1 : projedFields Fields Fs'
H2 : is_list (is_pair is_string is_value) Fields
UB : updateRecFields FRest VB Fs' RB
UB1 : projedFields Updated RB
H3 : replaceRecVal F (recVal RB) FB RB1
H4 : projedFields RA RB1
============================
 exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
 < search.

Proof completed.
 < Theorem projedVal_recVal :
     forall Fs V, projedVal (recVal Fs) V -> exists Fs', V = recVal Fs'.

============================
 forall Fs V, projedVal (recVal Fs) V -> exists Fs', V = recVal Fs'
 < induction on 1.

IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
============================
 forall Fs V, projedVal (recVal Fs) V @ -> exists Fs', V = recVal Fs'
 < intros PV.

Variables: Fs V
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : projedVal (recVal Fs) V @
============================
 exists Fs', V = recVal Fs'
 < PV: case PV.

Subgoal 1:

Variables: Fs
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
============================
 exists Fs', recVal Fs = recVal Fs'
 < search.

Subgoal 2:

Variables: Fs V
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : |{value}- recVal Fs ~~> V
============================
 exists Fs', V = recVal Fs'
 < case PV.

Subgoal 3:

Variables: Fs V V2
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : projedVal (recVal Fs) V2 *
PV1 : projedVal V2 V *
============================
 exists Fs', V = recVal Fs'
 < apply IH to PV.

Subgoal 3:

Variables: Fs V Fs'
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : projedVal (recVal Fs) (recVal Fs') *
PV1 : projedVal (recVal Fs') V *
============================
 exists Fs', V = recVal Fs'
 < apply IH to PV1.

Subgoal 3:

Variables: Fs Fs' Fs'1
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : projedVal (recVal Fs) (recVal Fs') *
PV1 : projedVal (recVal Fs') (recVal Fs'1) *
============================
 exists Fs', recVal Fs'1 = recVal Fs'
 < search.

Subgoal 4:

Variables: Fs Fs2
IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs'
PV : projedFields Fs Fs2 *
============================
 exists Fs', recVal Fs2 = recVal Fs'
 < search.

Proof completed.
 < Theorem projedVal_intVal :
     forall I V, projedVal (intVal I) V -> V = intVal I.

============================
 forall I V, projedVal (intVal I) V -> V = intVal I
 < induction on 1.

IH : forall I V, projedVal (intVal I) V * -> V = intVal I
============================
 forall I V, projedVal (intVal I) V @ -> V = intVal I
 < intros PV.

Variables: I V
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
PV : projedVal (intVal I) V @
============================
 V = intVal I
 < PV: case PV.

Subgoal 1:

Variables: I
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
============================
 intVal I = intVal I
 < search.

Subgoal 2:

Variables: I V
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
PV : |{value}- intVal I ~~> V
============================
 V = intVal I
 < case PV.

Subgoal 3:

Variables: I V V2
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
PV : projedVal (intVal I) V2 *
PV1 : projedVal V2 V *
============================
 V = intVal I
 < apply IH to PV.

Subgoal 3:

Variables: I V
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
PV : projedVal (intVal I) (intVal I) *
PV1 : projedVal (intVal I) V *
============================
 V = intVal I
 < apply IH to PV1.

Subgoal 3:

Variables: I
IH : forall I V, projedVal (intVal I) V * -> V = intVal I
PV : projedVal (intVal I) (intVal I) *
PV1 : projedVal (intVal I) (intVal I) *
============================
 intVal I = intVal I
 < search.

Proof completed.
 < Theorem projedVal_stringVal :
     forall S V, projedVal (stringVal S) V -> V = stringVal S.

============================
 forall S V, projedVal (stringVal S) V -> V = stringVal S
 < induction on 1.

IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
============================
 forall S V, projedVal (stringVal S) V @ -> V = stringVal S
 < intros PV.

Variables: S V
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
PV : projedVal (stringVal S) V @
============================
 V = stringVal S
 < PV: case PV.

Subgoal 1:

Variables: S
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
============================
 stringVal S = stringVal S
 < search.

Subgoal 2:

Variables: S V
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
PV : |{value}- stringVal S ~~> V
============================
 V = stringVal S
 < case PV.

Subgoal 3:

Variables: S V V2
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
PV : projedVal (stringVal S) V2 *
PV1 : projedVal V2 V *
============================
 V = stringVal S
 < apply IH to PV.

Subgoal 3:

Variables: S V
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
PV : projedVal (stringVal S) (stringVal S) *
PV1 : projedVal (stringVal S) V *
============================
 V = stringVal S
 < apply IH to PV1.

Subgoal 3:

Variables: S
IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S
PV : projedVal (stringVal S) (stringVal S) *
PV1 : projedVal (stringVal S) (stringVal S) *
============================
 stringVal S = stringVal S
 < search.

Proof completed.
 < Theorem projedVal_trueVal :
     forall V, projedVal trueVal V -> V = trueVal.

============================
 forall V, projedVal trueVal V -> V = trueVal
 < induction on 1.

IH : forall V, projedVal trueVal V * -> V = trueVal
============================
 forall V, projedVal trueVal V @ -> V = trueVal
 < intros PV.

Variables: V
IH : forall V, projedVal trueVal V * -> V = trueVal
PV : projedVal trueVal V @
============================
 V = trueVal
 < PV: case PV.

Subgoal 1:

IH : forall V, projedVal trueVal V * -> V = trueVal
============================
 trueVal = trueVal
 < search.

Subgoal 2:

Variables: V
IH : forall V, projedVal trueVal V * -> V = trueVal
PV : |{value}- trueVal ~~> V
============================
 V = trueVal
 < case PV.

Subgoal 3:

Variables: V V2
IH : forall V, projedVal trueVal V * -> V = trueVal
PV : projedVal trueVal V2 *
PV1 : projedVal V2 V *
============================
 V = trueVal
 < apply IH to PV.

Subgoal 3:

Variables: V
IH : forall V, projedVal trueVal V * -> V = trueVal
PV : projedVal trueVal trueVal *
PV1 : projedVal trueVal V *
============================
 V = trueVal
 < apply IH to PV1.

Subgoal 3:

IH : forall V, projedVal trueVal V * -> V = trueVal
PV : projedVal trueVal trueVal *
PV1 : projedVal trueVal trueVal *
============================
 trueVal = trueVal
 < search.

Proof completed.
 < Theorem projedVal_falseVal :
     forall V, projedVal falseVal V -> V = falseVal.

============================
 forall V, projedVal falseVal V -> V = falseVal
 < induction on 1.

IH : forall V, projedVal falseVal V * -> V = falseVal
============================
 forall V, projedVal falseVal V @ -> V = falseVal
 < intros PV.

Variables: V
IH : forall V, projedVal falseVal V * -> V = falseVal
PV : projedVal falseVal V @
============================
 V = falseVal
 < PV: case PV.

Subgoal 1:

IH : forall V, projedVal falseVal V * -> V = falseVal
============================
 falseVal = falseVal
 < search.

Subgoal 2:

Variables: V
IH : forall V, projedVal falseVal V * -> V = falseVal
PV : |{value}- falseVal ~~> V
============================
 V = falseVal
 < case PV.

Subgoal 3:

Variables: V V2
IH : forall V, projedVal falseVal V * -> V = falseVal
PV : projedVal falseVal V2 *
PV1 : projedVal V2 V *
============================
 V = falseVal
 < apply IH to PV.

Subgoal 3:

Variables: V
IH : forall V, projedVal falseVal V * -> V = falseVal
PV : projedVal falseVal falseVal *
PV1 : projedVal falseVal V *
============================
 V = falseVal
 < apply IH to PV1.

Subgoal 3:

IH : forall V, projedVal falseVal V * -> V = falseVal
PV : projedVal falseVal falseVal *
PV1 : projedVal falseVal falseVal *
============================
 falseVal = falseVal
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalExpr_forward : forall E T EE EE_T FE FE_T V 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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transE E T ->
         Ev : evalExpr FE EE E V O ->
         exists V_T,
           evalExpr FE_T EE_T T V_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 ->
         PC : projedCtxs (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 EE EE_T FE FE_T V 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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transA A T ->
         Ev : evalArgs FE EE A V O ->
         exists V_T,
           evalArgs FE_T EE_T T V_T O
      on Ev as IH_A,
      trans_evalRecFields_forward : forall RF T EE EE_T FE FE_T V 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 ->
         RFE : rel_FE FE FE_T ->
         PC : projedCtxs EE EE_T ->
         Trans : transRF RF T ->
         Ev : evalRecFields FE EE RF V O ->
         exists V_T,
           evalRecFields FE_T EE_T T V_T O
      on Ev as IH_RF.

Subgoal 1:

Variables: E T EE EE_T FE FE_T V 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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE E T
Ev : evalExpr FE EE E V 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
PC : projedCtxs (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 EE EE_T FE FE_T V 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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA A T
Ev : evalArgs FE EE A V 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 EE EE_T FE FE_T V 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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF RF T
Ev : evalRecFields FE EE RF V 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 EE EE_T FE FE_T I
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (num I) T
Ev : evalExpr FE EE (num I) (intVal I) [] @
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.1.1:

Variables: EE EE_T FE FE_T I
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (num I) (intVal I) [] @
============================
 exists V_T, evalExpr FE_T EE_T (num I) V_T []
 < search.

Subgoal 5.1.2:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.2:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.2:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 + I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
 < search.

Subgoal 5.1.3:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.3:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.3:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 - I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
 < search.

Subgoal 5.1.4:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.4:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.4:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 * I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
 < search.

Subgoal 5.1.5:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.5:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.5:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (div E1 E2) (intVal I) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 / I2 = I
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
 < search.

Subgoal 5.1.6:

Variables: T EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE true T
Ev : evalExpr FE EE true trueVal [] @
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.1.6:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE true trueVal [] @
============================
 exists V_T, evalExpr FE_T EE_T true V_T []
 < search.

Subgoal 5.1.7:

Variables: T EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE false T
Ev : evalExpr FE EE false falseVal [] @
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.1.7:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE false falseVal [] @
============================
 exists V_T, evalExpr FE_T EE_T false V_T []
 < search.

Subgoal 5.1.8:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.8:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev2.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < M2: apply matchTrue_projedVal to Pr2 _ Ev4.

Subgoal 5.1.8:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
M2 : matchTrue V_T1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < search.

Subgoal 5.1.9:

Variables: T EE EE_T FE FE_T O V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.9:

Variables: T EE EE_T FE FE_T O V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.9:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.9:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.9:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.9:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev2.

Subgoal 5.1.9:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
H3 : is_value V1
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < search.

Subgoal 5.1.10:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.10:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev2.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < M2: apply matchFalse_projedVal to Pr2 _ Ev4.

Subgoal 5.1.10:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (and E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchTrue V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
M2 : matchFalse V_T1
============================
 exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
 < search.

Subgoal 5.1.11:

Variables: T EE EE_T FE FE_T O V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.11:

Variables: T EE EE_T FE FE_T O V1 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.11:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.11:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.11:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.11:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev2.

Subgoal 5.1.11:

Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O
Pr1 : projedVal V1 V_T
H3 : is_value V1
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < search.

Subgoal 5.1.12:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.12:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev2.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < M2: apply matchTrue_projedVal to Pr2 _ Ev4.

Subgoal 5.1.12:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
M2 : matchTrue V_T1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < search.

Subgoal 5.1.13:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.13:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev3.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev2.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < M2: apply matchFalse_projedVal to Pr2 _ Ev4.

Subgoal 5.1.13:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (or E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : matchFalse V1
Ev3 : evalExpr FE EE E2 V2 O3 *
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
M2 : matchFalse V_T1
============================
 exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
 < search.

Subgoal 5.1.14:

Variables: T EE EE_T FE FE_T O V1 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.14:

Variables: T EE EE_T FE FE_T O V1 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.14:

Variables: EE EE_T FE FE_T O V1 E1 E3
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.14:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.14:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.14:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
H2 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev2.

Subgoal 5.1.14:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchFalse V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
H2 : is_value V1
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < search.

Subgoal 5.1.15:

Variables: T EE EE_T FE FE_T O V1 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.15:

Variables: T EE EE_T FE FE_T O V1 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (not E1) T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.15:

Variables: EE EE_T FE FE_T O V1 E1 E3
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.15:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.15:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.15:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
H2 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev2.

Subgoal 5.1.15:

Variables: EE EE_T FE FE_T O V1 E1 E3 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (not E1) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O *
Ev2 : matchTrue V1
H1 : is_expr E1
Trans : transE E1 E3
EvB1 : evalExpr FE_T EE_T E3 V_T O
Pr1 : projedVal V1 V_T
H2 : is_value V1
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (not E3) V_T O
 < search.

Subgoal 5.1.16:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.16:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.16:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 > I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < search.

Subgoal 5.1.17:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.17:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.17:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (greater E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 <= I2
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
 < search.

Subgoal 5.1.18:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.18:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.18:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I
Ev4 : matchInt V2 I
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I
M2 : matchInt V_T1 I
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.19:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.19:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchInt_projedVal to Pr1 _ Ev3.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchInt_projedVal to Pr2 _ Ev4.

Subgoal 5.1.19:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchInt V1 I1
Ev4 : matchInt V2 I2
Ev5 : I1 = I2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchInt V_T I1
M2 : matchInt V_T1 I2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.20:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.20:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev3.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchTrue_projedVal to Pr2 _ Ev4.

Subgoal 5.1.20:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
M2 : matchTrue V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.21:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.21:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev3.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchFalse_projedVal to Pr2 _ Ev4.

Subgoal 5.1.21:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
M2 : matchFalse V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.22:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.22:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchTrue_projedVal to Pr1 _ Ev3.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchFalse_projedVal to Pr2 _ Ev4.

Subgoal 5.1.22:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchTrue V1
Ev4 : matchFalse V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchTrue V_T
M2 : matchFalse V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.23:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.23:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchFalse_projedVal to Pr1 _ Ev3.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchTrue_projedVal to Pr2 _ Ev4.

Subgoal 5.1.23:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchFalse V1
Ev4 : matchTrue V2
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchFalse V_T
M2 : matchTrue V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.24:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.24:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchString_projedVal to Pr1 _ Ev3.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchString_projedVal to Pr2 _ Ev4.

Subgoal 5.1.24:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) trueVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S
Ev4 : matchString V2 S
Ev5 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S
M2 : matchString V_T1 S
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.25:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.25:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M1: apply matchString_projedVal to Pr1 _ Ev3.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S1
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < M2: apply matchString_projedVal to Pr2 _ Ev4.

Subgoal 5.1.25:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (eq E1 E2) falseVal O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 = S2 -> false
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S1
M2 : matchString V_T1 S2
============================
 exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
 < search.

Subgoal 5.1.26:

Variables: T EE EE_T FE FE_T S
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (stringLit S) T
Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.1.26:

Variables: EE EE_T FE FE_T S
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @
============================
 exists V_T, evalExpr FE_T EE_T (stringLit S) V_T []
 < search.

Subgoal 5.1.27:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.27:

Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < apply evalExpr_isValue to _ _ _ Ev2.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < M1: apply matchString_projedVal to Pr1 _ Ev3.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S1
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < M2: apply matchString_projedVal to Pr2 _ Ev4.

Subgoal 5.1.27:

Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @
Ev1 : evalExpr FE EE E1 V1 O2 *
Ev2 : evalExpr FE EE E2 V2 O3 *
Ev3 : matchString V1 S1
Ev4 : matchString V2 S2
Ev5 : S1 ++ S2 = S
Ev6 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE E1 E11
Trans1 : transE E2 E21
EvB1 : evalExpr FE_T EE_T E11 V_T O2
EvB2 : evalExpr FE_T EE_T E21 V_T1 O3
Pr1 : projedVal V1 V_T
Pr2 : projedVal V2 V_T1
H3 : is_value V1
H4 : is_value V2
M1 : matchString V_T S1
M2 : matchString V_T1 S2
============================
 exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
 < search.

Subgoal 5.1.28:

Variables: T EE EE_T FE FE_T V X
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (name X) T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case IsE.

Subgoal 5.1.28:

Variables: T EE EE_T FE FE_T V X
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (name X) T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
H1 : is_string X
============================
 exists V_T, evalExpr FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.1.28:

Variables: EE EE_T FE FE_T V X
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
H1 : is_string X
============================
 exists V_T, evalExpr FE_T EE_T (name X) V_T []
 < apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC Ev1.

Subgoal 5.1.28:

Variables: EE EE_T FE FE_T V X VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (name X) V [] @
Ev1 : lookupScopes X EE V
H1 : is_string X
H2 : lookupScopes X EE_T VB
H3 : projedVal V VB
============================
 exists V_T, evalExpr FE_T EE_T (name X) V_T []
 < search.

Subgoal 5.1.29:

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

Subgoal 5.1.29:

Variables: T EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Args A1
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < R: case RFE (keep).

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < LF: apply R to Ev1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < EvB1: apply IH_A to _ _ _ _ _ _ PC Trans Ev2.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < Pr: apply trans_evalArgs_same to _ _ _ _ _ _ _ _ Ev2 EvB1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsArgVals: apply evalArgs_isValue to _ _ _ Ev2.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply transA_is to _ Trans.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsV_T: apply evalArgs_isValue to _ _ _ EvB1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv).

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply projedArgs_zip to Pr Ev3.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < ZB: assert zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z').

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply zip_ctx_names to Z.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply zip_ctx_names to ZB.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsP: apply lookup_is_value_funCtx to _ Ev1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsP: case IsP.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
IsP : is_string RetVar
IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsP: case IsP1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsP: case IsP2.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsInitEnv: apply zip_is to _ _ Z.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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 V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < IsZ'+: apply zip_is to _ _ ZB.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < PCZ: apply zip_projedArgs to _ Z ZB.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < EvB2: apply IH_S to _ _ _ _ _ _ _ PCZ _ LF1 Ev4.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < PC': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ _ Ev4 EvB2.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
PC' : projedCtxs EE2 EE_T'
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply evalStmt_isCtx to _ _ _ Ev4.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
PC' : projedCtxs EE2 EE_T'
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply transS_is to _ _ LF1.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
PC' : projedCtxs EE2 EE_T'
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_stmt Body_T
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply evalStmt_isCtx to _ _ _ EvB2.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
PC' : projedCtxs EE2 EE_T'
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_stmt Body_T
H9 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC' Ev6.

Subgoal 5.1.29:

Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (call Fun Args) V O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE2 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA 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 Names
EvB1 : evalArgs FE_T EE_T A1 V_T O2
Pr : projedArgs ArgVals V_T
IsArgVals : is_list is_value ArgVals
H3 : is_args A1
IsV_T : is_list is_value V_T
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H4 : zip ArgNames V_T Z'
ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z')
H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames]
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)
IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z')
PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z']
EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3
PC' : projedCtxs EE2 EE_T'
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_stmt Body_T
H9 : is_list (is_list (is_pair is_string is_value)) EE_T'
H10 : lookupScopes RetVar EE_T' VB
H11 : projedVal V VB
============================
 exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
 < search.

Subgoal 5.1.30:

Variables: T EE EE_T FE FE_T O VF RF
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
Ev1 : evalRecFields FE EE RF VF O *
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.30:

Variables: T EE EE_T FE FE_T O VF RF
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.30:

Variables: EE EE_T FE FE_T O VF RF RF2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
Trans : transRF RF RF2
============================
 exists V_T, evalExpr FE_T EE_T (recBuild RF2) V_T O
 < apply IH_RF to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.30:

Variables: EE EE_T FE FE_T O VF RF RF2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @
Ev1 : evalRecFields FE EE RF VF O *
H1 : is_recFieldExprs RF
Trans : transRF RF RF2
H2 : evalRecFields FE_T EE_T RF2 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (recBuild RF2) V_T O
 < search.

Subgoal 5.1.31:

Variables: T EE EE_T FE FE_T V O VR Fields F Rec
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < case IsE.

Subgoal 5.1.31:

Variables: T EE EE_T FE FE_T V O VR Fields F Rec
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvB : evalExpr FE_T EE_T E2 V_T O
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvB : evalExpr FE_T EE_T E2 V_T O
Pr : projedVal VR V_T
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvB : evalExpr FE_T EE_T E2 V_T O
Pr : projedVal VR V_T
H3 : is_value VR
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < M: apply matchRec_projedVal to Pr _ Ev2.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T Fs'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvB : evalExpr FE_T EE_T E2 V_T O
Pr : projedVal VR V_T
H3 : is_value VR
M : matchRec V_T Fs'
M1 : projedFields Fields Fs'
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < apply projedFields_lookup_exists to M1 Ev3.

Subgoal 5.1.31:

Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T Fs' VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE (recFieldAccess Rec F) V O @
Ev1 : evalExpr FE EE Rec VR O *
Ev2 : matchRec VR Fields
Ev3 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Rec E2
EvB : evalExpr FE_T EE_T E2 V_T O
Pr : projedVal VR V_T
H3 : is_value VR
M : matchRec V_T Fs'
M1 : projedFields Fields Fs'
H4 : lookup Fs' F VB
H5 : projedVal V VB
============================
 exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
 < search.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transE <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P E_P1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P1
Trans1 : transE E_P1 T
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < apply proj_expr_unique to Trans Ev1 _.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < apply proj_expr_is to Ev1 _.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < EvB: apply IH_E to _ _ _ _ _ _ PC Trans1 Ev2.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
EvB : evalExpr FE_T EE_T T V_T O_P
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < EvP: apply proj_evalExpr_forward to Ev1 _ _ _ Ev.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_P O_P V_T V'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V_P O_P *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
EvB : evalExpr FE_T EE_T T V_T O_P
EvP : evalExpr FE EE E_P V' O
EvP1 : projedVal V V'
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < apply evalExpr_unique to _ _ _ Ev2 EvP.

Subgoal 5.1.32:

Variables: T EE EE_T FE FE_T V O E_P V_T V'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalExpr FE EE <unknown K evalExpr> V O @
Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P
Ev2 : evalExpr FE EE E_P V' O *
Trans : |{expr}- <unknown K evalExpr> ~~> E_P
Trans1 : transE E_P T
H1 : is_expr E_P
EvB : evalExpr FE_T EE_T T V_T O
EvP : evalExpr FE EE E_P V' O
EvP1 : projedVal V V'
============================
 exists V_T, evalExpr FE_T EE_T T V_T O
 < search.

Subgoal 5.2.1:

Variables: T Names Names' Scope EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 PC _ 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (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' : projedCtxs (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 V X E Ty
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V 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 V X E Ty
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V 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 V X E Ty Names1 Scope1 E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O V X E Ty Names1 Scope1 E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < case PC.

Subgoal 5.2.3:

Variables: Scope EE FE FE_T O V X E Ty Names1 Scope1 E2 V_T BRest B
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest)
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @
Ev1 : evalExpr FE (Scope::EE) E V O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T (B::BRest) E2 V_T O
H4 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA
H5 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB
H6 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB
H7 : projedCtxs EE BRest
============================
 exists EE_T', evalStmt FE_T (B::BRest) (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 E X
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) 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 E X
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) 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 E X E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_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 E X E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H3 : is_expr E2
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < PV: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H3 : is_expr E2
PV : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < apply projedCtxs_replaceScopes_exists_forward to _ _ _ PC PV Ev2.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T RB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : replaceScopes X V (Scope::EE) EE'
H1 : is_string X
H2 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H3 : is_expr E2
PV : projedVal V V_T
H4 : replaceScopes X V_T EE_T RB
H5 : projedCtxs EE' RB
============================
 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 RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) 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 RV FieldVals NewVals E Fields Rec
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) 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 RV FieldVals NewVals E Fields Rec E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_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 RV FieldVals NewVals E Fields Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < LB: apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC Ev2.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply lookupScopes_is to _ Ev2.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
H5 : is_value RV
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply matchRec_is to _ Ev3.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
H5 : is_value RV
H6 : is_list (is_pair is_string is_value) FieldVals
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < M: apply matchRec_projedVal to LB1 _ Ev3.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
H5 : is_value RV
H6 : is_list (is_pair is_string is_value) FieldVals
M : matchRec VB Fs'
M1 : projedFields FieldVals Fs'
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply projedFields_updateRecFields_exists_forward to _ M1 Pr Ev4.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs' RB
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
H5 : is_value RV
H6 : is_list (is_pair is_string is_value) FieldVals
M : matchRec VB Fs'
M1 : projedFields FieldVals Fs'
H7 : updateRecFields Fields V_T Fs' RB
H8 : projedFields NewVals RB
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply projedCtxs_replaceScopes_exists_forward to _ _ _ PC _ Ev5 with
     VB = recVal RB.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs' RB RB1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 O *
Ev2 : lookupScopes Rec (Scope::EE) RV
Ev3 : matchRec RV FieldVals
Ev4 : updateRecFields Fields V FieldVals NewVals
Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O
H4 : is_expr E2
Pr : projedVal V V_T
LB : lookupScopes Rec EE_T VB
LB1 : projedVal RV VB
H5 : is_value RV
H6 : is_list (is_pair is_string is_value) FieldVals
M : matchRec VB Fs'
M1 : projedFields FieldVals Fs'
H7 : updateRecFields Fields V_T Fs' RB
H8 : projedFields NewVals RB
H9 : replaceScopes Rec (recVal RB) EE_T RB1
H10 : projedCtxs EE' RB1
============================
 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 V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : 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 V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : 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 V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE 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 PC Trans Ev1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply matchTrue_projedVal to Pr _ Ev2.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply ctx_names_add_scope to Ctxs.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply projedCtxs_add_scope to PC.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans1 Ev3.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) Th2 EE_T' O3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvB2.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) Th2 EE_T' O3
PC+ : projedCtxs (Scope1::EE') EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < case PC+.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T BRest B
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchTrue V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) Th2 (B::BRest) O3
H8 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA
H9 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB
H10 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB
H11 : projedCtxs 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 V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : 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 V O2 Scope1 O3 El Th Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : 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 V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE 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 PC Trans Ev1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply matchFalse_projedVal to Pr _ Ev2.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply ctx_names_add_scope to Ctxs.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply projedCtxs_add_scope to PC.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev3.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) El2 EE_T' O3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvB2.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) El2 EE_T' O3
PC+ : projedCtxs (Scope1::EE') EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < case PC+.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T BRest B
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchFalse V
Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 *
Ev4 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H4 : is_value V
H5 : matchFalse V_T
H6 : ctx_names ([]::(Scope::EE)) ([]::Names')
H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) El2 (B::BRest) O3
H8 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA
H9 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB
H10 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB
H11 : projedCtxs 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 V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : 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 V O2 Scope1 EE3 O3 O4 O12 Body Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : 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 V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE 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 PC Trans1 Ev1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply matchTrue_projedVal to Pr _ Ev2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < Ctxs+: apply ctx_names_add_scope to Ctxs.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < PC+: apply projedCtxs_add_scope to PC.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev3.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvB2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope1::EE3) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < PC': case PC+.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope1::EE3) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < IsEE3+: apply evalStmt_isCtx to _ _ _ Ev3.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope1::EE3) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3)
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case IsEE3+.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope1::EE3) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 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 V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T'
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 *
Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope1::EE3) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_stmt Body2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < NS: apply evalStmt_names_same to _ _ _ Ev3.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' EE''
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::EE'') O3 *
Ev4 : evalStmt FE EE'' (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::EE'') EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) EE''
H7 : is_stmt Body2
NS : names_same (Scope::EE) EE''
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case NS.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' BRest B
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < CN: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' BRest B
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : ctx_names (Scope'::(B::BRest)) Names2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < CN: case CN.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B BRest1 B1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::BRest1)
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
CN2 : ctx_names (B::BRest) BRest1
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case CN2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B B1 BRest2 B2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T EE_T Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) EE_T
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case PC.

Subgoal 5.2.8:

Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B B1 BRest2 B2 BRest3 B3
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 EE_T' O3
PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T'
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < NS: apply evalStmt_names_same to _ _ _ EvB2.

Subgoal 5.2.8:

Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 EE''1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::EE''1) O3
PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::EE''1)
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
NS : names_same (B3::BRest3) EE''1
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < case NS.

Subgoal 5.2.8:

Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4))
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < IsBR4+: apply evalStmt_isCtx to _ _ _ EvB2.

Subgoal 5.2.8:

Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4))
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
IsBR4+ : is_list (is_list (is_pair is_string is_value)) (Scope'1::(B4::BRest4))
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < case IsBR4+.

Subgoal 5.2.8:

Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4))
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K B1
CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
H21 : is_list (is_pair is_string is_value) Scope'1
H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4)
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 5.2.8:

Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (B2::BRest2)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2))
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4))
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K Scope'2
CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
H21 : is_list (is_pair is_string is_value) Scope'1
H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4)
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < case PC+1.

Subgoal 5.2.8:

Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (B2::BRest2)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2))
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K Scope'2
CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
H21 : is_list (is_pair is_string is_value) Scope'1
H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4)
H23 : forall X VB, lookup Scope'1 X VB -> exists VA, lookup Scope' X VA
H24 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope'1 X VB
H25 : forall X VA VB,
        lookup Scope' X VA -> lookup Scope'1 X VB -> projedVal VA VB
H26 : projedCtxs (B::BRest) (B4::BRest4)
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev4 with
     T = while Cond2 Body2 EE_T = B4::BRest4 FE_T = FE_T O = O4.

Subgoal 5.2.8:

Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2 EE_T'1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3)
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
Ctxs : ctx_names (Scope::EE) (B2::BRest2)
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 V O2 *
Ev2 : matchTrue V
Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 *
Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 *
Ev5 : O2 ++ O3 = O12
Ev6 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2))
EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2
Pr : projedVal V V_T
H3 : is_value V
H4 : matchTrue V_T
Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2))
EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3
PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
PC'3 : projedCtxs (Scope::EE) (B3::BRest3)
H5 : is_list (is_pair is_string is_value) Scope'
H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
H7 : is_stmt Body2
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
CN : forall K I, mem (K, I) Scope' -> mem K Scope'2
CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope'
H11 : forall K I, mem (K, I) B -> mem K B2
H12 : forall K, mem K B2 -> exists I, mem (K, I) B
H13 : ctx_names BRest BRest2
H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA
H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB
H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB
H17 : projedCtxs EE BRest3
H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4
H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3
H20 : names_same BRest3 BRest4
H21 : is_list (is_pair is_string is_value) Scope'1
H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4)
H23 : forall X VB, lookup Scope'1 X VB -> exists VA, lookup Scope' X VA
H24 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope'1 X VB
H25 : forall X VA VB,
        lookup Scope' X VA -> lookup Scope'1 X VB -> projedVal VA VB
H26 : projedCtxs (B::BRest) (B4::BRest4)
H27 : evalStmt FE_T (B4::BRest4) (while Cond2 Body2) EE_T'1 O4
============================
 exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
 < search.

Subgoal 5.2.9:

Variables: T Names Names' Scope EE EE_T FE FE_T O V Body Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
============================
 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 O V Body Cond
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
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 O V Body Cond Names2 Body2 Cond2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvB : evalExpr FE_T EE_T Cond2 V_T O
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvB : evalExpr FE_T EE_T Cond2 V_T O
Pr : projedVal V V_T
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply evalExpr_isValue to _ _ _ Ev1.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvB : evalExpr FE_T EE_T Cond2 V_T O
Pr : projedVal V V_T
H3 : is_value V
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply matchFalse_projedVal to Pr _ Ev2.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) Cond V O *
Ev2 : matchFalse V
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvB : evalExpr FE_T EE_T Cond2 V_T O
Pr : projedVal V V_T
H3 : is_value V
H4 : matchFalse V_T
============================
 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
 < PC': apply projedCtxs_add_scope to PC.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
PC' : projedCtxs ([]::(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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
PC' : projedCtxs ([]::(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 PC' 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
PC' : projedCtxs ([]::(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
 < PC+: 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O
PC+ : projedCtxs (Scope1::EE') EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < case PC+.

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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (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
PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB : evalStmt FE_T ([]::EE_T) S3 (B::BRest) O
H2 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA
H3 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB
H4 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB
H5 : projedCtxs 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 O I O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) 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 O I O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) 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 O I O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.11:

Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.11:

Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
Pr : projedVal (intVal I) V_T
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply projedVal_intVal to Pr.

Subgoal 5.2.11:

Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 (intVal I) O2
Pr : projedVal (intVal I) (intVal I)
============================
 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 O O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal 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 O O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal 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 O O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.12:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.12:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
Pr : projedVal trueVal V_T
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply projedVal_trueVal to Pr.

Subgoal 5.2.12:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E trueVal O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 trueVal O2
Pr : projedVal trueVal trueVal
============================
 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 O O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal 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 O O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal 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 O O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.13:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.13:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
Pr : projedVal falseVal V_T
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply projedVal_falseVal to Pr.

Subgoal 5.2.13:

Variables: Names' Scope EE EE_T FE FE_T O O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E falseVal O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 falseVal O2
Pr : projedVal falseVal falseVal
============================
 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 O S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) 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 O S1 O2 E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) 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 O S1 O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.2.14:

Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB.

Subgoal 5.2.14:

Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 V_T O2
Pr : projedVal (stringVal S1) V_T
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply projedVal_stringVal to Pr.

Subgoal 5.2.14:

Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
PC : projedCtxs (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE E E2
EvB : evalExpr FE_T EE_T E2 (stringVal S1) O2
Pr : projedVal (stringVal S1) (stringVal S1)
============================
 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 PC _ 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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
PC : projedCtxs (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 EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA nilArgs T
Ev : evalArgs FE EE nilArgs [] [] @
============================
 exists V_T, evalArgs FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.3.1:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE nilArgs [] [] @
============================
 exists V_T, evalArgs FE_T EE_T nilArgs V_T []
 < search.

Subgoal 5.3.2:

Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 Rest E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
============================
 exists V_T, evalArgs FE_T EE_T T V_T O
 < case IsA.

Subgoal 5.3.2:

Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 Rest E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 exists V_T, evalArgs FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.3.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
============================
 exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.3.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvB1 : evalExpr FE_T EE_T E2 V_T O2
============================
 exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
 < EvB2: apply IH_A to _ _ _ _ _ RFE _ Trans1 Ev2.

Subgoal 5.3.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalArgs FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE E E2
Trans1 : transA Rest A2
EvB1 : evalExpr FE_T EE_T E2 V_T O2
EvB2 : evalArgs FE_T EE_T A2 V_T1 O3
============================
 exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
 < search.

Subgoal 5.3.3:

Variables: T EE EE_T FE FE_T V O
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V O @
============================
 exists V_T, evalArgs FE_T EE_T T V_T O
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 5.3.3:

Variables: T EE EE_T FE FE_T V O
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transA <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V O @
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 exists V_T, evalArgs FE_T EE_T T V_T O
 < case Or.

Subgoal 5.4.1:

Variables: T EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF nilRecFieldExprs T
Ev : evalRecFields FE EE nilRecFieldExprs [] [] @
============================
 exists V_T, evalRecFields FE_T EE_T T V_T []
 < case Trans.

Subgoal 5.4.1:

Variables: EE EE_T FE FE_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE nilRecFieldExprs [] [] @
============================
 exists V_T, evalRecFields FE_T EE_T nilRecFieldExprs V_T []
 < search.

Subgoal 5.4.2:

Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
============================
 exists V_T, evalRecFields FE_T EE_T T V_T O
 < case IsRF.

Subgoal 5.4.2:

Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 exists V_T, evalRecFields FE_T EE_T T V_T O
 < Trans: case Trans.

Subgoal 5.4.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
============================
 exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
 < EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1.

Subgoal 5.4.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2 V_T
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V_T O2
============================
 exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
 < EvB2: apply IH_RF to _ _ _ _ _ RFE _ Trans1 Ev2.

Subgoal 5.4.2:

Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2 V_T V_T1
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_T O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @
Ev1 : evalExpr FE EE E V1 O2 *
Ev2 : evalRecFields FE EE Rest VRest O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE E E2
Trans1 : transRF Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V_T O2
EvB2 : evalRecFields FE_T EE_T RF2 V_T1 O3
============================
 exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
 < search.

Subgoal 5.4.3:

Variables: T EE EE_T FE FE_T V O
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V O @
============================
 exists V_T, evalRecFields FE_T EE_T T V_T O
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 5.4.3:

Variables: T EE EE_T FE FE_T V O
IH_E : forall E T EE EE_T FE FE_T V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * ->
         exists V_T, evalExpr FE_T EE_T T V_T O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T EE EE_T FE FE_T V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * ->
         exists V_T, evalArgs FE_T EE_T T V_T O
IH_RF : forall RF T EE EE_T FE FE_T V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * ->
          exists V_T, evalRecFields FE_T EE_T T V_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
RFE : rel_FE FE FE_T
PC : projedCtxs EE EE_T
Trans : transRF <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V O @
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 exists V_T, evalRecFields FE_T EE_T T V_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.
 < Theorem projedCtxs_reflexive :
     forall L,
       is_list (is_list (is_pair is_string is_value)) L -> projedCtxs L L.

============================
 forall L, is_list (is_list (is_pair is_string is_value)) L -> projedCtxs L L
 < induction on 1.

IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
============================
 forall L, is_list (is_list (is_pair is_string is_value)) L @ -> projedCtxs L L
 < intros Is.

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

Subgoal 1:

IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
============================
 projedCtxs [] []
 < search.

Subgoal 2:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
============================
 projedCtxs (H::T) (H::T)
 < apply IH to Is1.

Subgoal 2:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
============================
 projedCtxs (H::T) (H::T)
 < unfold .

Subgoal 2.1:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
============================
 forall X VB, lookup H X VB -> exists VA, lookup H X VA
 < search.

Subgoal 2.2:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
============================
 forall X VA, lookup H X VA -> exists VB, lookup H X VB
 < search.

Subgoal 2.3:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
============================
 forall X VA VB, lookup H X VA -> lookup H X VB -> projedVal VA VB
 < intros LA LB.

Subgoal 2.3:

Variables: T H X VA VB
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
LA : lookup H X VA
LB : lookup H X VB
============================
 projedVal VA VB
 < apply lookup_unique to LA LB.

Subgoal 2.3:

Variables: T H X VB
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
LA : lookup H X VB
LB : lookup H X VB
============================
 projedVal VB VB
 < search.

Subgoal 2.4:

Variables: T H
IH : forall L,
       is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L
Is : is_list (is_pair is_string is_value) H *
Is1 : is_list (is_list (is_pair is_string is_value)) T *
H1 : projedCtxs T T
============================
 projedCtxs T 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
 < PC: apply projedCtxs_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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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]
PC : projedCtxs [(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' PC _ 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]
PC : projedCtxs [(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.
Back to example home